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版-这就是我需要的版本