在没有 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,也不是动态加载器)。