【问题标题】:mex + nvcc linker problems with standard library标准库的 mex + nvcc 链接器问题
【发布时间】:2014-07-18 10:14:25
【问题描述】:

我在让 Matlab mex 链接到 Mac OS X Maverics 上的 C++ 标准库时遇到了一些麻烦。链接到 nvcc 生成的代码时会出现问题。

所有错误都与标准库有关:

Undefined symbols for architecture x86_64: "std::string::c_str() const", referenced from: ...

据我所知,nvcc 和 mex 都使用相同的编译器 (gcc -> clang),并且它们都链接到 -lstdc++/-stdlib=libstdc++,但它仍然会导致一大堆链接器错误。另一方面,如果我编译有问题的指令:

gcc -O -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -mmacosx-version-min=10.9 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2012a.app/extern/lib/maci64/mexFunction.map -o "solver_matlab.mexmaci64" solver_matlab.o "../solver_cu.o" "../solver_cu_link.o" -L/usr/local/cuda/lib -lcudart -lcublas -L/Applications/MATLAB_R2012a.app/bin/maci64 -lmx -lmex -lmat -lstdc++

在终端中使用gcc-4.8,然后代码编译正确。我不确定如何对这个问题做出正面或反面,所以如果有人有任何建议,我将非常感谢。

【问题讨论】:

    标签: c++ matlab gcc cuda


    【解决方案1】:

    如果有人偶然发现同样的问题,解决方案是把另外两个标志传递给 mex

    LDFLAGS='\$LDFLAGS -stdlib=libstdc++' CXXFLAGS='\$CXXFLAGS -stdlib=libstdc++'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 2012-02-12
      相关资源
      最近更新 更多