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

卢卡·达万佐(Luca Davanzo)

我已经看过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不知道可以从libnite.so中获得nite符号,因此当它尝试解析符号时,它不知道要在该库中查找,并且环境中没有任何内容告诉它加载该库以查找符号。

两种解决方案:

(1)重新编译A.so并明确依赖于Nite 1.3,因此在编译时请执行以下操作:

g++ -o A.so <files making up A.so> -L<DIRECTORY OF NITE> -Wl,-rpath <DIRECTORY OF NITE> -lnite

如果libnite.so位于标准位置之一,则应该可以省略-L-Wl,-rpath选项。这将使您的库明确依赖libnite。

(2)编译时链接到libnite.so B,因此链接行应添加:

-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选项)在哪里寻找该库

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

与使用名称空间的外部库链接时,如何解决C中的未定义引用?

如何解决“未定义的引用错误”?

如何解决Android NDK中的“对'ntohl'的未定义引用”编译错误?

使用uclibc时如何解决对fenv.h中函数的未定义引用?

如何解决ErrorException:未定义的索引:laravel中的数据库?

如何解决C中的未定义结构?

如何解决 Laravel 中未定义的方法 links()?

如何解决Laravel中的未定义索引?

如何解决laravel 5.3中未定义的路由?

如何解决suiteCRM中的未定义标签

如何解决JULIA中的“ UndefVarError:未定义消耗”

如何解决kaltura中未定义的kwidget

如何解决“对象未定义”

如何解决“模块未定义”。

如何解决未定义的路由

什么是未定义的引用/未解决的外部符号错误,如何解决?

如何从NDK构建的静态库中解决NDK构建的静态库中的“对<myfunction>的未定义引用”?

来自静态库中共享库的未定义引用

如何解决Eclipse上的“对未定义变量rcp_xulrunner的引用”错误

在Windows上链接到libjpeg时如何解决“未定义的引用”?

如何解决对自己的 C++ 成员函数的未定义引用?

用C编译时如何解决“未定义引用”?

如何解决:“无法获取未定义或空引用的属性'值'”

如何解决数据库关联的“未定义方法belogns_to”?

如何解决“无法读取未定义的属性'定义'”?

C ++共享库对`FooClass :: SayHello()'的未定义引用

使用cmake共享库的未定义引用

即使nm指示共享库中存在该符号,也未定义对符号的引用

如何解决“无法读取未定义的属性'title'”?