gpt4 book ai didi

linux - 'gcc -lXext' 成功但 libXext 似乎未链接

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:53 24 4
gpt4 key购买 nike

二进制文件已与 gcc 链接,使用:

gcc notion.o -Wl,-whole-archive ../ioncore/ioncore.a
-Wl,-no-whole-archive -L/usr/X11R6/lib -lX11 -lXext -lSM -lICE
-Wl,-whole-archive -L../libmainloop -lmainloop -lextl -ltu
-Wl,-no-whole-archive <code>pkg-config --libs lua5.1</code> -ldl -lm -lrt -Xlinker
--export-dynamic -o notion

链接成功 - 但是,在启动应用程序时,用户报告由于 undefined symbol (XShapeCombineRectangles) 而导致崩溃。 XShapeCombineRectangles应该在 libXext 中可用。

确实,通过“ldd”检查,Xext 并未列为该用户的共享库依赖项:

linux-gate.so.1 => (0x0068f000)libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0x00ec7000)liblua5.1.so.0 => /usr/lib/i386-linux-gnu/liblua5.1.so.0(0x00226000)libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x005da000)libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x005e1000)librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x0032c000)libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00335000)libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0x007d6000)/lib/ld-linux.so.2 (0x00882000)libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0(0x006dc000)libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0x00110000)libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6(0x00dd8000)

当我自己编译应用程序时,ldd 确实 显示了 libXext,而且确实没有崩溃。

这里可能发生了什么?

(更多上下文:此错误已在 http://sourceforge.net/tracker/?func=detail&aid=3427206&group_id=314802&atid=1324528 报告)

最佳答案

您的链接器(或 gcc)可能会自动添加 --as-needed在幕后,在你的系统上XShapeCombineRectangles来自 libXext 以外的一些库

您可以找出哪个库定义了 XShapeCombineRectangles链接中的符号:只需添加 -Wl,-y,XShapeCombineRectangles到您的链接行。

添加-v将显示是否有 --as-needed争论是否在起作用。

您可以强制最终可执行文件引用 libXext通过附加 -Wl,--no-as-needed,-lXext到链接行。

更新:我误解了这个问题(你的表述非常糟糕)。

重述:

  1. 应用程序链接并在 OPs 系统上正常工作,并且 ldd<br/>
    app
    显示对 libXext 的依赖
  2. 该应用程序还在最终用户系统上正确链接和启动,但是 ldd app 显示libXext
  3. 当应用程序尝试 dlopen("de.so", ...)在最终用户系统上,这失败了 de.so: undefined symbol XShapeCombineRectangles

如果以上几点是正确的,那很可能是

  1. 最终用户系统有libXext.a , 但不是 libXext.so
  2. 主应用程序不调用 XShapeCombineRectangles , 仅在 de.so 中编码做
  3. 何时de.so链接,没有-lXext它的链接线上。

要么安装libXext.so ,或将主应用程序链接到 -u XShapeCombineRectangles可能会解决问题。

要了解这个问题,您可能需要阅读 this .

我的猜测是 XShapeCombineRectangles未从主可执行文件中引用,因此未从 libXext.a 中提取“书架”,因此尽管 --export-dynamic 没有从主可执行文件中导出.

关于linux - 'gcc -lXext' 成功但 libXext 似乎未链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com