Linux 如何解决共享库中未定义的引用?

Linux 如何解决共享库中未定义的引用?,linux,eclipse,g++,shared-libraries,undefined-reference,Linux,Eclipse,G++,Shared Libraries,Undefined Reference,我已经看过stackoverflow中的所有答案:不可能 我编译了一个使用Nite1.3的共享库a。所以我的图书馆在: /usr/local/lib/A.so 我的项目B包括A 编译B时,我得到了很多未定义的引用。。我怎样才能真正解决这个问题 usr/local/lib/A.so: undefined reference to `XnVFlowRouter::XnVFlowRouter(char const*)' ..... 发生的情况是,A.so不知道nite符号可以从libnite中获

我已经看过stackoverflow中的所有答案:不可能

我编译了一个使用Nite1.3的共享库a。所以我的图书馆在:

 /usr/local/lib/A.so
我的项目B包括A

编译B时,我得到了很多未定义的引用。。我怎样才能真正解决这个问题

usr/local/lib/A.so: undefined reference to `XnVFlowRouter::XnVFlowRouter(char const*)'
.....

发生的情况是,A.so不知道nite符号可以从libnite中获得。因此,当它尝试解析符号时,它不知道要在该库中查找,并且环境中没有任何内容告诉它加载该库以查找符号

两种解决方案:

(1) 使用Nite 1.3上的显式依赖项重新编译A.so,因此在编译时:

g++ -o A.so <files making up A.so> -L<DIRECTORY OF NITE> -Wl,-rpath <DIRECTORY OF NITE> -lnite
作为附录,如果您有
.h
文件,但没有相应的
.a
.so
用于实现,那么您需要解决该问题,然后才能使用
a.so

例如,如果
libnite.so
位于
/usr/local/lib
中,则需要添加:

-L/usr/local/lib -Wl,-rpath /usr/local/lib -lnite
到编译行,以便它知道在编译时(
-L
选项)和运行时(
-Wl,-rpath
选项)在何处查找库

-L/usr/local/lib -Wl,-rpath /usr/local/lib -lnite