我目前正在開發一個Play 2.1項目,在該項目中,對Web服務的請求將處理下載用戶提供的圖像,重新調整大小和重新裁剪它們,並且還過濾出已知的錯誤照片(例如,我們不希望用戶上傳公司徽標)。我們正在嘗試使用OpenCV來處理後端工作,但我似乎無法讓IntelliJ以與java項目一起使用的方式添加OpenCV jar。當將jar添加爲Play項目的依賴項時,IntelliJ找不到OpenCV的本機庫
我已經能夠從源代碼構建OpenCV,沒有問題。這給我留下了以下文件夾: /首頁/查/ OpenCV的/釋放
此文件夾中,我有興趣三個文件:
- 斌/ OpenCV的-246.jar
- 的lib/cv2.so
- 的lib/libopencv_java246.so
如果我嘗試的jar文件添加到的IntelliJ作爲一個新的Java庫,它似乎發現的所有類/方法,我可以使用AUT編寫代碼鄰完成。我也可以點擊相應的類或方法,並將其帶到正確的文件中。
然而,當我嘗試運行遊戲項目,我得到這個錯誤:
[info] Loading project definition from /home/charles/Github/ImageProject
[info] Set current project to ImageProject (in build file:/home/charles/Github/ImageProject/)
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
Server started, use Alt+D to stop
[info] Compiling 1 Java source to /home/charles/Github/ImageProject/target/scala-2.10/classes...
[error] /home/charles/Github/ImageProject/app/controllers/Application.java:7: error: package org.opencv.core does not exist
[error] import org.opencv.core.Core;
[error] ^
我也嘗試添加的jar文件的副本直接到項目中(所以把OpenCV的-246。將jar放入ImageProject/lib),然後改爲從該位置添加java庫。但是,這只是給我留下了一個不同的錯誤:
java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
我懷疑是問題的一部分可能與本機庫的Java OpenCV的包裝用途(以上文件2或3)。在Eclipse中,當你添加一個jar文件時,你可以明確地設置本地庫的位置,這使得OpenCV能夠正常工作。我讀過建議,以此來解決這個問題的:
-Djava.library.path=/home/charles/opencv/release/lib
但是,這似乎並沒有工作(雖然也許我在錯誤的地方設置它,我已經嘗試設置它作爲一個JVM?項目的運行配置中的參數以及IDE設置中的參數,但似乎都未被使用或受到尊重)。
注意:再次澄清一下,這是一個Play2項目,而不是Android項目。似乎有一些Android特定的幫助,在這種情況下不相關。
這感覺應該是一個相當直接的事情,但我已經花了幾天的時間試圖找到答案在這一點上,仍然沒有。有任何想法嗎?
其他細節: 我也試過以下OpenCV的文檔,這裏的 「運行SBT樣本」: http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html
而且我也得到了類似的錯誤:
[email protected]:~/JavaSample$ sbt run
[info] Loading project definition from /home/charles/JavaSample/project
[info] Set current project to JavaSample (in build file:/home/charles/JavaSample/)
[info] Compiling 1 Java source to /home/charles/JavaSample/target/scala-2.10/classes...
[info] Running HelloOpenCV
Hello, OpenCV
[error] (run-main) java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at HelloOpenCV.main(HelloOpenCV.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
[trace] Stack trace suppressed: run last compile:run for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) Nonzero exit code: 1
[error] Total time: 2 s, completed Jul 17, 2013 5:11:39 PM
這[錯誤] /home/charles/Github/ImageProject/app/controllers/Application.java:7:錯誤:軟件包org.opencv.core不存在罷工我作爲一個Java CP問題,而不是本地lib問題。我認爲你的SBT配置不正確。 – morpheus05
您是否有過在這種情況下如何配置SBT的例子? –
查看我的回覆http://stackoverflow.com/questions/24856501/how-do-you-link-a-native-library-to-a-jar-in-intellij/37038583#37038583本機庫通常是運行時依賴性,所以你必須指定虛擬機在運行時如何找到它,而不是編譯時的IntelliJ。 –