在64位系统上使用-m32标志编译/链接g ++ - >手动添加-ldl?

时间:2014-06-30 20:03:35

标签: c++ linux g++ 32bit-64bit

这是一个很长的路要走,但我设法在Linux Mint 17 Cinnamon 64-bit下包含一个包含在C ++代码中的共享文件(libpi_pi_gcs2.so)。现在灰尘背负着我还有一个问题......让我总结一下:

我在usr / local / lib中复制了libpi_pi_gcs2.so。

尝试使用

编译main.cpp
g++ -Wall -o test main.cpp -lpi_pi_gcs2

faild,返回

/usr/bin/ld: skipping incompatible //usr/local/lib/libpi_pi_gcs2.so when searching for -lpi_pi_gcs2
/usr/bin/ld: cannot find -lpi_pi_gcs2
collect2: error: ld returned 1 exit status

我和我的室友谈过,他猜测共享库可能只有32位兼容。 使用-m32让我向前迈出一步!但是产生了新的错误。

我用Google搜索,似乎我需要C32标准库。我安装了:

apt-get install ia32-libs 

旧的错误消息再次消失,新的消息出现后,我在谷歌搜索安装后:

apt-get install g++-multilib  

现在尝试使用

编译它
g++ -Wall -o test -m32 main.cpp -lpi_pi_gcs2 

让错误信息:

//usr/local/lib/libpi_pi_gcs2.so: undefined reference to `dlsym'
//usr/local/lib/libpi_pi_gcs2.so: undefined reference to `dlopen'
//usr/local/lib/libpi_pi_gcs2.so: undefined reference to `dlclose'

解决方案是以下命令:

g++ -Wall -o test -m32 main.cpp -lpi_pi_gcs2 -ldl

现在我的问题:

是否有必要显式地声明-ldl,即与libdl.so链接,因为-m32标志声明后面的所有内容都是32位,因此链接器将没有明确地 写-ldl搜索32位libdl.so?我想我的是64位我正在使用64位系统。

你怎么看?更多细节和背景信息表示赞赏。

问候,

newandlost

0 个答案:

没有答案