C++ 在OSX-c+上从源代码构建+;
我对C++ 在OSX-c+上从源代码构建+;,c++,macos,vtk,itk,C++,Macos,Vtk,Itk,我对c++几乎一无所知,我正试图从10.10osx上的源代码构建ITK工具。因此,我严格按照文档进行操作,当我试图生成时,我得到了大量重复的错误 duplicate symbol ___sputc in: CMakeFiles/itktiff.dir/tif_aux.o CMakeFiles/itktiff.dir/tif_unix.o ld: 69 duplicate symbols for architecture x86_64 clang: error: linker co
c++
几乎一无所知,我正试图从10.10osx
上的源代码构建ITK
工具。因此,我严格按照文档进行操作,当我试图生成时,我得到了大量重复的错误
duplicate symbol ___sputc in:
CMakeFiles/itktiff.dir/tif_aux.o
CMakeFiles/itktiff.dir/tif_unix.o
ld: 69 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/libitktiff.3.16.0.dylib] Error 1
make[1]: *** [Utilities/itktiff/CMakeFiles/itktiff.dir/all] Error 2
我得到的消息被涂成红色,比如链接CXX共享库../../../bin/libitkgdcm.dylib
(红色表示错误?)
然后我到了最后
[ 44%] Built target itkgdcm
make: *** [all] Error 2
我读到在最新的OSX版本中构建ITK
并不简单,因为clang
的新路径,人们应该设置这样一个标志:CMAKE_CXX_FLAGS=-stdlib=libstdc++-std=c++11
或CMAKE_CXX_FLAGS=-stdlib libstdc++-stdc++-std=c++03
有人能帮忙吗 库中出现了不应该出现的伪符号
官方的解决方法是使用较新版本的ITK工具,但是如果必须使用较旧的版本,则需要使用C选项-std=gnu89
进行配置,以使内联按照应该实现的方式运行
OSX使用两个C++库,一个是CubAudio默认为 LBC++< /Cuff>,另一个是官方GCC默认为LbSTDC++< /C> >,如果编译多个C++项目以构建最终目标,则必须确保它们都用同一个C++标准库编译。
假设您正计划链接到libstdc++
,正如您所指出的,我已将编译说明更新如下:
这意味着您应该使用以下选项运行clang:
cmake -DBUILD_SHARED_LIBS=true -DCMAKE_C_FLAGS=-std=gnu89 -DCMAKE_CXX_FLAGS="-stdlib=libstdc++ -std=c++03" CMakeLists.txt
文件code/Common/itkklmsecgmentationborder.h
有两个对rhs.m_指针的引用,它应该是rhs->m_指针
——编译器将此作为一个明显的错误
有很多模板方法实例混淆的问题,我在这里添加了一些参考:
Utilities/vxl/core/vnl/vnl_matrix_fixed_ref.h
中的第657行在调用equal
第46、137行的文件code/Common/itkParametricPath.tx
需要在调用Evaluate
调用GenerateTreeLoop
调用SetNthInput
调用GraftOutput
SetNthInvocation
与code/basicFilter/itkBloxBoundaryPointImageToBloxBoundaryProfileImageFilter.txx有关的问题
还有更多,但要让它编译,它们是一个相对繁琐的修复程序。我放了一个,应该没问题,虽然它来自一个稍微不干净的版本,所以可能缺少一些更改
我放弃了用libc++
-abs的模糊性问题是开始,可能还有更多,所以我觉得不值得追求。Hm…从来没有钱买MAC…但是。。。MAC有点基于BSD。在BSD下,如果我没有弄错的话,通常标准的lib不是libstdc++而是libc++。@BitTickler好的,让我们给它一个解释try@BitTickler现在我得到错误“更快”error:if(*fp==NULL)则二进制表达式('std::of Stream'(也称为'basic_of Stream')和'long')的操作数无效
您正在编译哪个版本的ITK
我想您至少需要4.4版才能在Mavericks/Yosemite上工作?@Petesh是的,我正在尝试编译3.16版-这就是我需要的版本