在没有 headers 的情况下链接到 Linux 上的库
Linking to lib on Linux without headers
你好,我正在尝试 link 去一个没有 headers 的图书馆。我完全按照库中的定义编写原型,但 ld 不能 link 它。
readelf -Ws Release/libcef.so | grep KeyStringToDomKey
386822: 00000000066d73d0 328 FUNC LOCAL HIDDEN 17 _ZN2ui16KeycodeConverter17KeyStringToDomKeyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE
readelf -Ws main-6cf4e2.o | grep KeyStringToDomKey
13: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _ZN2ui16KeycodeConverter17KeyStringToDomKeyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE
#include <iostream>
#include <string>
#include "domkey.h"
namespace ui {
class KeycodeConverter {
public:
static DomKey KeyStringToDomKey(const std::string&);
};
}
using namespace std;
int main()
{
auto t = ui::KeycodeConverter::KeyStringToDomKey("t");
cout << "Hello World!" << endl;
return 0;
}
386822: 00000000066d73d0 328 FUNC LOCAL HIDDEN 17 _ZN2u...
HIDDEN
是这里的 key:这个符号在共享库之外不可见(静态链接器也没有/usr/bin/ld
,也不是动态加载器)。
你好,我正在尝试 link 去一个没有 headers 的图书馆。我完全按照库中的定义编写原型,但 ld 不能 link 它。
readelf -Ws Release/libcef.so | grep KeyStringToDomKey
386822: 00000000066d73d0 328 FUNC LOCAL HIDDEN 17 _ZN2ui16KeycodeConverter17KeyStringToDomKeyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE
readelf -Ws main-6cf4e2.o | grep KeyStringToDomKey
13: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _ZN2ui16KeycodeConverter17KeyStringToDomKeyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE
#include <iostream>
#include <string>
#include "domkey.h"
namespace ui {
class KeycodeConverter {
public:
static DomKey KeyStringToDomKey(const std::string&);
};
}
using namespace std;
int main()
{
auto t = ui::KeycodeConverter::KeyStringToDomKey("t");
cout << "Hello World!" << endl;
return 0;
}
386822: 00000000066d73d0 328 FUNC LOCAL HIDDEN 17 _ZN2u...
HIDDEN
是这里的 key:这个符号在共享库之外不可见(静态链接器也没有/usr/bin/ld
,也不是动态加载器)。