链接选项不兼容 - 在命令中的任何位置都看不到选项

问题描述 投票:0回答:2

g++ -Wl,-rpath,/usr/local/lib -o /path-to/executable {list of .o files} -L/usr/X11R6/lib -L/usr/local/lib -lQtGui -L/usr/local/lib -L/usr/openwin/lib -lSM -lICE -lXext -lX11 -lresolv -lsocket -lnsl -lQtCore -lm -lrt -ldl -lpthread

我正在使用上面的命令来编译可执行文件。好吧,实际上 makefile 正在为我做这件事......但无论如何。

我在使用上述命令时遇到错误:

ld: fatal: option -dn and -P are incompatible
ld: fatal: Flags processing errors

我没有看到 -dn 或 -P 在命令或 makefile 中的任何位置提供给链接器。链接器从哪里获取此信息?

linux linker g++
2个回答
0
投票

通过尝试暂时删除链接命令的每个部分,我发现删除“

,rpath,/usr/local/lib
”可以使事情正常工作。这让我想到我在 Linux 世界的其他地方设置了链接器选项。

进一步调查证明我正在设置 LD_LIBRARY_PATH,其中包含一些导致冲突的链接器选项。更改 LD_LIBRARY_PATH 后,一切都按预期进行。


0
投票

-Wl,-rpath
似乎会导致 Solaris 上链接器上的
-dn
选项。

-dn
设置与动态选项不兼容的静态链接。

对于路径

/usr/local/lib

  • -Wl,-rpath,/usr/local/lib
    可以替换为:

  • Solaris 上的
  • -R/usr/local/lib

  • -L/usr/local/lib
    在 AIX 上。

© www.soinside.com 2019 - 2024. All rights reserved.