我有一个Swift项目,我正在使用Travis CI。我主要在Linux上开发,所以我只关心设置Travis在Linux上运行测试(一切运行都很好)。我现在正在尝试扩展以在macOS上运行测试。我已成功手动构建并运行macOS上的测试。我遇到的问题是Travis在macOS上失败了链接器错误,即使我相信我使用的是与我手动运行它们相同的进程/命令。我认为我要么将Travis配置错误(很可能这是因为Travis对我来说是全新的),或者我只是误解了Mac上的工作原理(也可能是因为我刚开始使用苹果)。
这是我的.travis.yml文件:
matrix:
include:
- os: linux
dist: trusty
sudo: required
- os: osx
osx_image: xcode8
allow_failures:
- os: osx
before_install:
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
sudo apt-get update;
sudo apt-get install liblapack3 liblapacke liblapacke-dev -y;
sudo apt-get install libopenblas-base libopenblas-dev -y;
fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
brew update;
brew install homebrew/dupes/lapack;
brew install homebrew/science/openblas;
ls /usr/local/opt/openblas/lib;
fi
- git clone https://github.com/IBM-Swift/Package-Builder.git
script:
- ./Package-Builder/build-package.sh -projectDir $TRAVIS_BUILD_DIR
如您所见,我的项目依赖于LAPACK和OpenBLAS,我在构建之前安装了它。从Travis作业日志中,OpenBLAS安装似乎成功(LAPACK也是如此)。我从brew获得以下通知,
This formula is keg-only, which means it was not symlinked into /usr/local.
macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:
LDFLAGS: -L/usr/local/opt/openblas/lib
CPPFLAGS: -I/usr/local/opt/openblas/include
和ls /usr/local/opt/openblas/lib
的结果显示,
cmake libopenblas.dylib
libblas.dylib libopenblasp-r0.2.18.a
liblapack.dylib libopenblasp-r0.2.18.dylib
libopenblas.a
到目前为止,这么好。如您所见,我正在使用IBM的Package Builder项目来实际构建Swift项目。我已将其配置为使用以下命令在macOS上构建:
swift build -Xlinker -L/usr/local/opt/lapack/lib -Xlinker -L/usr/local/opt/openblas/lib
作业日志显示这确实是用于构建项目的命令。
编译成功,但在链接中我收到以下错误:
Linking ./.build/debug/NiftyPackageTests.xctest/Contents/MacOS/NiftyPackageTests
ld: library not found for -lopenblas for architecture x86_64
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: build had 1 command failures
这对我来说很令人惊讶,因为我可以看到该库位于我可以看到的目录中,已添加到我的库链接搜索路径中。
我尝试在构建命令中添加-Xlinker -v
,希望获得一些有用的信息,但这不会产生任何额外的输出。
任何想法出了什么问题或从哪里开始?也许有更好的方法?我没有一个xcode项目,我认为我不需要一个,但如果能有更好的话,我可以制作一个。以我的方式安装OpenBLAS是否有问题,brew说这是重复的?我找不到它预先安装或弄清楚如何链接它,所以当我手动执行此操作时,我必须进行brew安装以使其工作。
编辑:您可以看到Travis日志here