C++ Snow Leopard上的动态库“文件不是必需的体系结构”

C++ Snow Leopard上的动态库“文件不是必需的体系结构”,c++,macos,opencv,C++,Macos,Opencv,我已经在snow leopard上编译了opencv,它说它编译正确,但是当我尝试针对它编译示例程序时,我得到如下输出: g++ -o tm_scons template.o -L/opencv/opencv/build/lib -lcxcore -lcv -lcvaux -lhighgui -lml ld: warning: in /opencv/opencv/build/lib/libcxcore.dylib, file is not of required architecture ld:

我已经在snow leopard上编译了opencv,它说它编译正确,但是当我尝试针对它编译示例程序时,我得到如下输出:

g++ -o tm_scons template.o -L/opencv/opencv/build/lib -lcxcore -lcv -lcvaux -lhighgui -lml
ld: warning: in /opencv/opencv/build/lib/libcxcore.dylib, file is not of required architecture
ld: warning: in /opencv/opencv/build/lib/libcv.dylib, file is not of required architecture
ld: warning: in /opencv/opencv/build/lib/libcvaux.dylib, file is not of required architecture
ld: warning: in /opencv/opencv/build/lib/libhighgui.dylib, file is not of required architecture
ld: warning: in /opencv/opencv/build/lib/libml.dylib, file is not of required architecture

这可能是我编译OpenCV或正在使用它的应用程序时出现的问题吗?

正确编译并不意味着为您现在尝试编译的任何体系结构进行编译。很可能库被编译为32位,而您正在编译为64位,反之亦然。

很可能您的程序被编译为64位,这是SnowLeopard上的默认行为,库被编译为32位。构建程序时,请尝试向编译器添加-m32或-arch i386标志,看看链接是否有效。

事实证明,神奇之处在于使用-m32并切换到/usr/bin/g++-4.0编译器


呃……

您知道一种简单的方法来调整opencv编译步骤,告诉它编译64位吗?我想这就是问题所在。您可以使用lipo命令验证库的体系结构。lipo-info/path/to/library我想这个文件也会给你这些信息。