Dan*_*age 14 ubuntu gcc libraries
一旦我将Ubuntu发行版升级到11.10,我就开始看到gcc的奇怪链接器行为.我能够通过将我的-l
参数移动到gcc命令的末尾来修复问题(我的问题类似于此线程中描述的问题,并且建议的解决方案对我有用......谢谢!).
我的问题是......为什么我现在才有这个问题?我已经在OS X和Ubuntu上开发和测试了这段代码了一段时间:我从来不知道-l
命令应该在你的.c文件之后,但即便如此,这从来没有给我带来过问题.我猜它与GCC版本有关,而不是Ubuntu版本.
这个新版本是否比早期版本更严格地执行此要求?
对于 gcc 以及其他编译器(例如 clang),链接器命令参数的顺序确实很重要。根据经验,在编写链接器命令时我将使用以下顺序:
共享库的顺序也很重要。如果 libfoo.so 依赖于 libbar.so,则应-lfoo
在 之前列出-lbar
。
如果您不知道确切的依赖关系,这可能会变得非常复杂。Linux 上的以下命令可能会有所帮助:
ldd /path/to/libfoo.so
Run Code Online (Sandbox Code Playgroud)
这列出了 libfoo.so 所依赖的所有共享库。
至于你的问题为什么你的特定 gcc 版本会出现这个问题,在不知道你的应用程序需要哪些库的情况下很难判断。但如果您应用我上面描述的顺序,它应该适用于较旧和较新的 gcc 版本。
提示:如果使用正确,CMake 可以为您处理所有依赖项......
归档时间: |
|
查看次数: |
7255 次 |
最近记录: |