Linker 64位Ubuntu上的PhysX链接器问题

Linker 64位Ubuntu上的PhysX链接器问题,linker,physics,Linker,Physics,我在让我的项目与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时

我在让我的项目与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/../../../../../../../../../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的符号链接。有人知道发生了什么事吗?如果你需要更多的细节,请告诉我。一如既往,请提前感谢。

看起来您的PhysiX sharedobject是以32位编译的。您无法链接32位。因此对于64位应用程序,elf是不同的。您下载了64位版本的库吗?我甚至不确定PhysX是否有64位的支持。这不是我最后一次看它,但到现在已经差不多两年了

编辑:
PhysX使用一些严重的数组处理和组装以及其他非常低级的内存技巧,这些技巧依赖于32位体系结构。要让它以64位运行需要大量的工作。现在,由于他们瞄准的是游戏机制造商(他们真正的付费客户),而且还没有一款游戏机是64位的,而且在他们发布64位版本之前可能还需要一段时间,所以你将无法链接,即使你欺骗编译器链接他们,它也会立即转储内核,正如Robert Gould所说,不能将32位和64位对象或共享库链接在一起;它们根本不兼容链接

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

RedHat使这变得简单——它们为所有内容提供32位和64位包,并将它们分为/usr/lib32和/usr/lib64


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

是的,目前还没有64位库。我不得不做一些事情来强制它在64位下安装。我的印象是,它仍然可以兼容。也许我被误导了。PhysX使用了一些严重的数组处理和组装以及其他非常低级的内存技巧,这些都依赖于32位体系结构。要让它以64位运行需要大量的工作。现在,由于他们的目标是游戏机制造商(他们真正的付费客户),而且还没有64位的游戏机。。。。。。他们可能需要一段时间才能发布64位版本,因此您将无法链接,即使您欺骗编译器链接它们,它也会立即转储内核:(啊!显然是可能的!您必须使用“-m32”flag。人们实际上已经让它工作了。但是,现在它没有正确链接glut。glut的64位库似乎不再工作。我需要让它链接32位库。我在搜索路径中指定了/usr/lib32……但它仍在usr/lib中查找。我将在链接到它时发布答案(假设我这样做了)谢谢你帮我澄清,我自己不用Unbuntu,所以我不知道他们没有同时发货