2015-04-02 98 views
0

我遇到了共享库(Linux)和与此库链接但未找到符号的程序的问题 - 虽然它们在那里。这就是我的:链接期间未找到符号

位于/ usr/lib中的共享库“libetest.so”。当我做一个

readelf -Ws /usr/lib/libetest.so.0 

它给了(一些人旁)的输出:

54: 000052c0 905 FUNC LOCAL DEFAULT 11 ETEST_open_connection 

现在我有一个应用程序,使得使用ETEST_open_connection的()。当我与

gcc lib_test.cpp -DENV_LINUX -letest 

打造它,它失败,出现链接错误

lib_test.cpp:(.text+0x32): undefined reference to `ETEST_open_connection' 

如图所示之前的符号是存在的!任何想法为什么这会失败?

回答

0

请尝试:

gcc -DENV_LINUX -letest lib_test.cpp 

这应该是正确的参数顺序。

+0

对不起,这没有什么区别。也使用++(因为它是一个.cpp文件)并不能解决这个问题... – Elmi 2015-04-02 19:38:27

+1

哦,好吧;)那么你必须使用g ++。这里的问题是C++为这个函数使用了一个不同的名字。你必须用extern“C”声明它,以便链接器使用这个函数的C名称 – MatzZze 2015-04-02 19:42:12

+0

在头文件中它已经被声明为extern“C”: -/ – Elmi 2015-04-02 19:43:49