我正在编译mpich2 1.4.1p1对于 OSX,并使用 -sysroot 指示编译器链接到 10.5 的 SDK。我在脚本中执行以下操作,以避免每次都输入所有内容。如您所见,我对环境变量感到绝望,并使用了我能在其 README 中找到的所有内容(Fortran 除外,我正在禁用它们)。
export CFLAGS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
export CPPLAGS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
export LDFLAGS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
export CXXFLAGS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
export LIBS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
../configure --with-pm=gforker --enable-fast=O3 --disable-f77 --disable-fc --prefix=/opt/mpich2/64/
不幸的是,编译后的版本没有与 OSX10.5 目录中的某些库链接。
otool -L /opt/mpich2/64/bin/mpiexec
/opt/local/lib/libxml2.2.dylib (compatibility version 10.0.0, current version 10.6.0)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
SDK 中的 iconv 库是 7.0.0,
otool -L /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libiconv.2.dylib
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
我正在尝试针对此应用程序进行分发,并且我在实验室中测试过的大多数 OSX 机器都具有 libiconv 版本 7.0.0。我不希望这成为我的分发版的要求。
通过 grep mpich 的源代码,我可以看到使用错误版本的日志和 makefile,其中有一些-L/opt/local/lib/
散布在整个 hydra 和 doxygen 构建过程中。
我遗漏了哪些环境变量?我意识到这是一个复杂的构建脚本,有人跳过约定的可能性很高。我将继续搜索 makefile。我会看看是否使用将sed
每个实例替换为-L/opt/local/lib/
我真正想要的路径可以解决问题。
答案1
我决定构建 1.4 和 1.3 来查看问题是否存在。
值得庆幸的是,1.4 版构建并运行良好。看起来好像iconv
静态链接在该版本的mpich2
--running中otool -L mpiexec
甚至没有libiconv
作为依赖项包含。