64位Ubuntu上的PhysX链接器问题

时间:2009-01-22 03:13:48

标签: 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:在搜索时跳过不兼容的/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的符号链接。有谁知道发生了什么?如果您需要更多细节,请与我们联系。一如既往,提前谢谢。

2 个答案:

答案 0 :(得分:3)

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

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

RedHat使这很简单 - 它们为所有东西提供32位和64位包,并将它们分成/ usr / lib32和/ usr / lib64 ...

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

答案 1 :(得分:1)

看起来你的PhysiX sharedobject是用32位编译的。你不能将32位.so链接到64位应用程序,精灵是不同的。你下载了64位版本的库吗?我甚至不确定PhysX是否有64位支持。它不是我上次看的,但差不多是2年前。

修改 PhysX使用一些严格的阵列处理和汇编以及其他非常低级别的内存技巧,这取决于32位架构。让它在64位运行需要大量的工作。现在,因为他们的目标是控制台游戏制造商(他们真正的PAYING客户),并且没有控制台是64位,它可能还需要一段时间才能发布64位版本,所以你将无法链接,即使你确实欺骗编译器链接它们,它会立即核心转储