java.lang.UnsatisfiedLinkError `GOMP_4.0' Travis CI 使用 Java OpenCV 库
java.lang.UnsatisfiedLinkError `GOMP_4.0' Travis CI Using Java OpenCV library
我正在构建我的项目,它使用 org.bytedeco.javacpp-presets 版本的 opencv。我正在使用 gradle 作为依赖项 management/building/testing 等...
构建和测试在我的本地机器上运行良好,但在 travis 上 运行 我收到以下错误:
Caused by:
java.lang.UnsatisfiedLinkError: /tmp/javacpp28510966720824/libjniopencv_core.so: /usr/lib/x86_64-linux-gnu/libgomp.so.1: version `GOMP_4.0' not found (required by /tmp/javacpp28510966720824/libopencv_core.so.3.0)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1937)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1822)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1083)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:539)
... 10 more
我修改了 travis.yml 以便我可以查看文件是否确实存在。
$ ls -l /usr/lib/*/libgomp.so*
lrwxrwxrwx 1 root root 16 Apr 15 2012 /usr/lib/x86_64-linux-gnu/libgomp.so.1 -> libgomp.so.1.0.0
-rw-r--r-- 1 root root 55888 Apr 15 2012 /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
$ dpkg -l | grep libgomp1
ii libgomp1 4.6.3-1ubuntu5 GCC OpenMP (GOMP) support library
在我的本地 (OSX) 和另一台开发机器 (Linux) 上一切正常。我不确定我错过了什么。
这是遇到问题的项目:
https://github.com/WPIRoboticsProjects/GRIP
特别是这个 PR:https://github.com/WPIRoboticsProjects/GRIP/pull/7
关于这个问题的问题:https://github.com/bytedeco/javacpp-presets/issues/84
对于 Maven 测试目标,您可以使用带参数 Djava.library.path 的 maven-surefire-plugin 或 maven-dependency-plugin 解压您的库。
我遇到了类似的问题。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<systemProperties>
<property>
<name>TESSDATA_PREFIX</name>
<value>${tessdata.directory}</value>
</property>
</systemProperties>
<argLine>-Djava.library.path=${native.library.directory} -Djni.library.path=${native.library.directory}</argLine>
</configuration>
</plugin>
所以才发现问题是 GOMP_4.0
只适用于 gcc 4.8 及更高版本。运行 Travis 的虚拟机是 Ubuntu 12.04 LTS Server Edition 64 bit,它有 gcc 4.6。 gcc 4.6 有 GOMP_3.0
。基本上你需要更新 gcc.
在 travis 中,最好的方法(不使用 sudo)是使用他们的 apt 插件。
只需将其添加到您的 .travis.yml
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-4.8
- g++-4.8
或者,如果您只是在 Ubuntu 系统上遇到这个问题:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.8 g++-4.8
我正在构建我的项目,它使用 org.bytedeco.javacpp-presets 版本的 opencv。我正在使用 gradle 作为依赖项 management/building/testing 等... 构建和测试在我的本地机器上运行良好,但在 travis 上 运行 我收到以下错误:
Caused by:
java.lang.UnsatisfiedLinkError: /tmp/javacpp28510966720824/libjniopencv_core.so: /usr/lib/x86_64-linux-gnu/libgomp.so.1: version `GOMP_4.0' not found (required by /tmp/javacpp28510966720824/libopencv_core.so.3.0)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1937)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1822)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1083)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:539)
... 10 more
我修改了 travis.yml 以便我可以查看文件是否确实存在。
$ ls -l /usr/lib/*/libgomp.so*
lrwxrwxrwx 1 root root 16 Apr 15 2012 /usr/lib/x86_64-linux-gnu/libgomp.so.1 -> libgomp.so.1.0.0
-rw-r--r-- 1 root root 55888 Apr 15 2012 /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
$ dpkg -l | grep libgomp1
ii libgomp1 4.6.3-1ubuntu5 GCC OpenMP (GOMP) support library
在我的本地 (OSX) 和另一台开发机器 (Linux) 上一切正常。我不确定我错过了什么。
这是遇到问题的项目: https://github.com/WPIRoboticsProjects/GRIP
特别是这个 PR:https://github.com/WPIRoboticsProjects/GRIP/pull/7
关于这个问题的问题:https://github.com/bytedeco/javacpp-presets/issues/84
对于 Maven 测试目标,您可以使用带参数 Djava.library.path 的 maven-surefire-plugin 或 maven-dependency-plugin 解压您的库。 我遇到了类似的问题。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<systemProperties>
<property>
<name>TESSDATA_PREFIX</name>
<value>${tessdata.directory}</value>
</property>
</systemProperties>
<argLine>-Djava.library.path=${native.library.directory} -Djni.library.path=${native.library.directory}</argLine>
</configuration>
</plugin>
所以才发现问题是 GOMP_4.0
只适用于 gcc 4.8 及更高版本。运行 Travis 的虚拟机是 Ubuntu 12.04 LTS Server Edition 64 bit,它有 gcc 4.6。 gcc 4.6 有 GOMP_3.0
。基本上你需要更新 gcc.
在 travis 中,最好的方法(不使用 sudo)是使用他们的 apt 插件。 只需将其添加到您的 .travis.yml
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-4.8
- g++-4.8
或者,如果您只是在 Ubuntu 系统上遇到这个问题:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.8 g++-4.8