• Uncategorized

About c++ : Linking-to-lib-on-Linux-without-headers

Question Detail

Hello I’m trying to link to a library without headers. I wrote prototype exactly as defined in library, but ld cannot link it.

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 {
        static DomKey KeyStringToDomKey(const std::string&);

using namespace std;

int main()
    auto t = ui::KeycodeConverter::KeyStringToDomKey("t");
    cout << "Hello World!" << endl;
    return 0;

Question Answer

386822: 00000000066d73d0 328 FUNC LOCAL HIDDEN 17 _ZN2u...

HIDDEN is the key here: this symbol is not visible outside of the shared library (neither to static linker /usr/bin/ld, nor to the dynamic loader).

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.