当前位置: 技术问答>linux和unix
生成so文件是否可以再引用so文件?
来源: 互联网 发布时间:2016-06-17
本文导语: 我现在有一任务,就是再封装一些so文件所提供的函数(),我自己封装好后的也以so 文件的形式发布, 一开始我编译文件的命令是: g++ -o my.so myinterface.cpp a.so b.so -pthread link的时候报错: undefined reference to "Provide_Fun...
我现在有一任务,就是再封装一些so文件所提供的函数(),我自己封装好后的也以so 文件的形式发布,
一开始我编译文件的命令是:
g++ -o my.so myinterface.cpp a.so b.so -pthread
link的时候报错:
undefined reference to "Provide_Function1(int i)"
说明: Provide_Function1()是其它so文件所提供的接口函数,有一头文件是声明了这些函数的。
然后我再用
g++ -shared -o my.so myinterface.cpp a.so b.so -pthread
命令时候就不会报错.
请问各位兄弟,能否解释一下这问题产生的原因和解决方法?
然后,我用我封装后的so文件,提供给第三方使用时候,当第三方编译的时候,不用 -shared 选项时也会link的时候报错:
undefined reference to "Provide_Function1(int i)"
当第三方编译的时候,用 -shared 选项时能成功生成可执行文件,但是一运行可执行文件就报错:
是一段错误报告,具体如下:
line 2: 2179 段错误
请问各位兄弟,有没有啥好解决的方法?
一开始我编译文件的命令是:
g++ -o my.so myinterface.cpp a.so b.so -pthread
link的时候报错:
undefined reference to "Provide_Function1(int i)"
说明: Provide_Function1()是其它so文件所提供的接口函数,有一头文件是声明了这些函数的。
然后我再用
g++ -shared -o my.so myinterface.cpp a.so b.so -pthread
命令时候就不会报错.
请问各位兄弟,能否解释一下这问题产生的原因和解决方法?
然后,我用我封装后的so文件,提供给第三方使用时候,当第三方编译的时候,不用 -shared 选项时也会link的时候报错:
undefined reference to "Provide_Function1(int i)"
当第三方编译的时候,用 -shared 选项时能成功生成可执行文件,但是一运行可执行文件就报错:
是一段错误报告,具体如下:
line 2: 2179 段错误
请问各位兄弟,有没有啥好解决的方法?
|
g++ -shared -o my.so myinterface.cpp a.so b.so -pthread
命令时候就不会报错.
就应该这么做,目前你做的是一个so库,所以编译的时候应该加上-shared。
当你编译一个应用程序时候,头文件正确的话,库link正确的话,编译时不会报undefined reference to "Provide_Function1(int i)" ,到运行时才找实体。
所以楼主生成so用g++ -shared -o my.so myinterface.cpp a.so b.so -pthread就可以。
命令时候就不会报错.
就应该这么做,目前你做的是一个so库,所以编译的时候应该加上-shared。
当你编译一个应用程序时候,头文件正确的话,库link正确的话,编译时不会报undefined reference to "Provide_Function1(int i)" ,到运行时才找实体。
所以楼主生成so用g++ -shared -o my.so myinterface.cpp a.so b.so -pthread就可以。
|
一般在linux系统的标准的库目录:如/lib;/usr/lib等几个目录下,当你增加新的库进去,
需要运行lddconfig命令,就会把你的库名字加入到/etc/ld.so.cache文件里,那么系统首先访问这个文件
就快速的找到你的新增加的库了
一般系统到这几个目录没有找到你的动态库文件,那么就会找当前目录文件"."看看有没有库,忘记具体顺序了
其它目录的库可以在/etc/ld.so.conf.d/*.conf指定位置,也是需要运行lddconfig加入的那个缓冲文件的
还有种方法系统也会去查找$LD_LIBRARY_PATH环境变量所指的路径查找你的库,以上都没有,那么就不可以运行
|
大概 不 行 ,so 相当与.o 文件.
以前 用静态库 我 试试,是没 行通.
|
楼主也以my.a静态库发布
|
顶10楼……