2

我在让我的项目与 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:在搜索 -lPhysXLoader 时跳过不兼容的 /usr/lib/gcc/x86_64-linux-gnu/4.2.3/../../../../lib/libPhysXLoader.so

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 的符号链接。有谁知道发生了什么?如果您需要更多详细信息,请告诉我。与往常一样,提前致谢。

4

2 回答 2

3

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

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

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

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

于 2009-01-22T07:45:06.230 回答
1

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

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

于 2009-01-22T03:22:39.693 回答