4

我正在尝试为 c++ 程序同时链接 32 位和 64 位 .so 文件。我使用的是 64 位 Ubuntu 12.04.1 我也没有要重新编译的源文件。

当我运行 g++ 命令时:

g++ onlineTraining.cpp -I /usr/local/MATLAB/R2012a_Student/extern/include/ -L /home/forest/SoarSuite/out/ -L /usr/local/MATLAB/R2012a_Student/bin/glnx86/ -I /home/森林/SoarSuite/out/include -leng -lmat -lmex -lut -lSoar

我得到以下输出,因为它无法识别 32 位 .so 文件:

/usr/bin/ld:搜索-leng时跳过不兼容的/usr/local/MATLAB/R2012a_Student/bin/glnx86//libeng.so
/usr/bin/ld: 找不到 -len
/usr/bin/ld:搜索-lmat时跳过不兼容的/usr/local/MATLAB/R2012a_Student/bin/glnx86//libmat.so
/usr/bin/ld: 找不到 -lmat
/usr/bin/ld:搜索-lmex时跳过不兼容的/usr/local/MATLAB/R2012a_Student/bin/glnx86//libmex.so
/usr/bin/ld: 找不到 -lmex
/usr/bin/ld:搜索-lut时跳过不兼容的/usr/local/MATLAB/R2012a_Student/bin/glnx86//libut.so
/usr/bin/ld: 找不到 -lut
collect2: ld 返回 1 个退出状态

当我使用 -m32 运行 g++ 命令时:

g++ -m32 onlineTraining.cpp -I /usr/local/MATLAB/R2012a_Student/extern/include/ -L /home/forest/SoarSuite/out/ -L /usr/local/MATLAB/R2012a_Student/bin/glnx86/ -I /家/森林/SoarSuite/out/include -leng -lmat -lmex -lut -lSoar

我得到以下输出,因为现在它无法识别 64 位 .so 文件:

/usr/bin/ld: 搜索 -lSoar 时跳过不兼容的 /home/forest/SoarSuite/out//libSoar.so
/usr/bin/ld: 找不到 -lSoar
/usr/bin/ld:在搜索 -lstdc++ 时跳过不兼容的 /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so
/usr/bin/ld:在搜索 -lstdc++ 时跳过不兼容的 /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a
/usr/bin/ld: 找不到 -lstdc++
collect2: ld 返回 1 个退出状态

是否可以同时链接 34 位和 64 位 .so 文件?谢谢你。

4

2 回答 2

2

不,这是不可能的。32 位库只能链接到 32 位可执行文件,64 位库只能链接到 64 位可执行文件。

如果您尝试链接的 Matlab 库仅作为 32 位可用,则您还需要将应用程序构建为 32 位(使用-m32),并且仅链接 32 位库。

于 2013-01-11T03:32:49.883 回答
-1

我建议制作一个运行两个编译器命令的 shell 脚本或制作文件。

于 2013-01-11T03:16:39.027 回答