Linux 如何解决共享库中未定义的引用?
我已经看过stackoverflow中的所有答案:不可能 我编译了一个使用Nite1.3的共享库a。所以我的图书馆在: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中获
/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