linux - 使用动态库编译二进制文件
问题描述
我有 20 个共享对象文件,我想使用“a.so”中的一个函数,但我的问题是 a.so 链接到其他库。当我编译我的 main 时,我收到以下错误:
/usr/bin/ld: warning: b.so, needed by /home/test/lib/a.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: c.so, needed by /home/test/lib/a.so, not found (try using -rpath or -rpath-link)
如何编译我的 main 以便能够在 a.so 中使用该函数?我曾尝试使用此方法:gcc -L. -WL, -rpath,. main.c -l{libraryName} -o main
但出现以下错误:
gcc: error: unrecognized command line option ‘-WL,’; did you mean ‘-Wa,’?
gcc: error: unrecognized command line option ‘-rpath,.’
解决方案
当我编译我的 main 时,我收到以下错误:
上面的说法有两个错误:
- 你得到一个警告,而不是一个错误,并且
- 当你链接你的程序时得到它,而不是在你编译它时。
如何编译我的 main 以便能够在 a.so 中使用该函数?
像这样:
gcc -L. -Wl,-rpath=. main.c -l{libraryName} -o main
PS 一般来说,-rpath
使用相对路径是一种不好的做法,因为如果您从不同的目录调用它,程序将无法运行。更好的解决方案是使用 absolute-rpath
代替:
gcc -L/home/test/lib -Wl,-rpath=/home/test/lib main.c -l{libraryName} -o main
推荐阅读
- git - 在 git 中的两个标签之间拉取请求
- javascript - 在 React 中将类组件转换为功能组件
- java - 有没有办法设置 Ignite 瘦客户端类加载器?
- powershell - 在 pscustomobject 中重复一个值
- swift - 无法在 ios 设备上模拟推送通知
- python - 使用带有 python 代码的屏幕管理器切换屏幕
- python - 无法在python中安装pptk
- python - 是否可以在没有 exec() 的情况下自动使模块的所有公共类方法成为全局函数?以turtle.py为例
- xaml - UWP XAML 智能感知 DataTemplate.DataType
- .net - .NET Profiler - 获取函数参数的类型