在64位Ubuntu 12.10中使用32位库编译代码的符号链接

时间:2013-02-19 00:00:04

标签: matlab 64-bit symlink 32-bit mex

我正在尝试在64位Ubuntu 12.10上使用32位2012a Matlab来使用C代码

我已经下载了所有可能的库(gcc 4.7,build-essential,libs-32等)但是我收到以下错误

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgomp.so when searching for -lgomp
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgomp.a when searching for -lgomp
/usr/bin/ld: cannot find -lgomp
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

我发现通过将符号链接从64位库设置为32位库可以解决此问题。我试图创建不同的链接但无法完成编译。

提前谢谢。

更新1

gcc-multilib缺失,所以

之后
sudo apt-get install gcc-multilib 

我收到以下错误

Warning: You are using gcc version "4.7.2-2ubuntu1)".  The version
     currently supported with MEX is "4.4.6".
     For a list of currently supported compilers see: 
     http://www.mathworks.com/support/compilers/current_release/

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status

我的mexopts.sh看起来像

CC='gcc'
CFLAGS='-ansi -D_GNU_SOURCE'
CFLAGS="$CFLAGS -fPIC -pthread -m32"
CFLAGS="$CFLAGS  -fexceptions"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64" 
CLIBS="$RPATH $MLIBS -lm"
COPTIMFLAGS='-O -DNDEBUG'
CDEBUGFLAGS='-g'
CLIBS="$CLIBS -lstdc++"

-m32在那里,但是我不确定它是否应该以这种方式编写。 有人可以详细说明如何编辑mexopts.sh以使matlab查看32位库吗?

更新2

查看Linking using g++ fails searching for -lstdc++

之后

我尝试安装g ++ - multilib

sudo apt-get install g++-multilib 

现在,错误的形式如下:

/usr/bin/ld: i386:x86-64 architecture of input file `bin/fv_cache.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `bin/obj_func.o' is incompatible    with i386 output
...

1 个答案:

答案 0 :(得分:0)

  • 首先确保您可以通过执行gcc从命令提示符构建32位可执行文件(此处有更多信息:32bit application on 64 bit Linux
  • 在matlab命令提示符下执行mex -setup并选择gcc作为编译器。最后,您将收到有关'mexopts.sh'位置的消息(通常为〜/ .matlab // mexopts.sh)
  • 尝试“mex”。
  • 如果不成功,请打开mexopts.sh并检查选项-m32是否在CFLAGS中。如果没有,请添加它。