【问题标题】:PhysX Linker Problem on 64-bit Ubuntu64 位 Ubuntu 上的 PhysX 链接器问题
【发布时间】:2010-10-02 20:21:11
【问题描述】:

我无法让我的项目与我的 64 位计算机上的 PhysX 库链接。它编译得很好。我使用了与我的 32 位机器上完全相同的设置(除了一些调试标志),它们的链接非常好。这是构建输出:

g++ -L/usr/lib/PhysX/v2.8.1 -L/usr/lib -o"PhysXTest" ./main.o -lPhysXLoader -lglut

/usr/bin/ld:搜索-lPhysXLoader时跳过不兼容的/usr/lib/libPhysXLoader.so

/usr/bin/ld: 搜索时跳过不兼容的 /usr/lib/gcc/x86_64-linux-gnu/4.2.3/../../../../lib/libPhysXLoader.so - lPhysXLoader

usr/bin/ld: 搜索 -lPhysXLoader 时跳过不兼容的 /usr/lib/../lib/libPhysXLoader.so

/usr/bin/ld:搜索-lPhysXLoader时跳过不兼容的/usr/lib/gcc/x86_64-linux-gnu/4.2.3/../../../libPhysXLoader.so

/usr/bin/ld:搜索-lPhysXLoader时跳过不兼容的/usr/bin/../lib/libPhysXLoader.so

/usr/bin/ld:搜索-lPhysXLoader时跳过不兼容的/usr/lib64/libPhysXLoader.so

/usr/bin/ld:搜索-lPhysXLoader时跳过不兼容的/usr/lib/libPhysXLoader.so

/usr/bin/ld: 找不到-lPhysXLoader

另外,如果有任何影响,我已经设置了指向 usr/lib 的符号链接。有谁知道发生了什么?如果您需要更多详细信息,请告诉我。一如既往,提前致谢。

【问题讨论】:

    标签: linker physics


    【解决方案1】:

    正如 Robert Gould 所说,您不能将 32 位和 64 位对象或共享库链接在一起;它们根本不兼容链接。

    由于您只有 32 位 PhysX,您必须编译所有其他将链接到 32 位模式下的可执行文件(在您的示例中为 main.o)的代码(通过使用 @ 987654321@ gcc 标志),安装所有其他库(glut、libGL、libX11、libc 等)的 32 位版本。

    RedHat 让这一切变得简单——它们为所有内容提供 32 位和 64 位软件包,并将它们分成 /usr/lib32 和 /usr/lib64 ...

    AFAICT,Ubuntu 没有:amd64 和 i386 软件包都包含 /usr/lib/libglut.so.3.8.0。您需要下载所有内容的 32 位版本,然后“手动”将它们安装到 /usr/lib32 而不是 /usr/lib。

    【讨论】:

    • 感谢您澄清这一点,我自己不使用 Unbuntu,所以我不知道他们没有同时发货
    【解决方案2】:

    看起来您的 PhysiX 共享对象是用 32 位编译的。您不能将 32 位 .so 链接到 64 位应用程序,精灵是不同的。你下载了64位版本的库吗?我什至不确定 PhysX 是否支持 64 位。这不是我上次看的时候,但到现在已经差不多 2 年前了。

    编辑: PhysX 使用了一些严重的数组处理和组装以及其他非常低级的内存技巧,这些技巧依赖于 32 位架构。要让它在 64 位上运行需要大量的工作。现在,由于他们针对的是主机游戏制造商(他们真正的付费客户),而且还没有主机是 64 位的,而且他们可能需要一段时间才能发布 64 位版本,所以你将无法链接,即使你确实欺骗编译器链接它们,它会立即转储核心

    【讨论】:

    • 是的,目前没有 64 位库。我不得不做一些事情来强制它在 64 位下安装。我的印象是它仍然是兼容的。也许我被误导了。
    • PhysX 使用了一些严重的数组处理和组装以及其他非常低级的内存技巧,这些技巧依赖于 32 位架构。要让它在 64 位上运行需要大量的工作。现在,由于他们瞄准的是主机游戏制造商(他们真正的付费客户),而且还没有主机是 64 位的……
    • ...他们可能需要一段时间才能发布 64 位版本,因此您将无法链接,即使您确实欺骗编译器链接它们,它也会成为核心马上转储:(
    • 啊!显然这是可能的!您必须使用“-m32”标志。人们实际上已经让它发挥作用。但是,现在它没有正确连接过剩。用于 glut 的 64 位库似乎不再起作用。我需要让它链接32位的。我在搜索路径中指定了 /usr/lib32...
    • ...但它仍在 usr/lib 中查找。当我得到链接时我会发布一个答案(假设我这样做了)。
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多