0
我正在嘗試在Ubuntu的jni程序中使用libjpeg。我用g ++編譯我的C++代碼,並將libjpeg添加爲庫。我試圖鏈接共享版本和靜態版本,但他們都導致Java中的「未定義符號:jpeg_std_error」錯誤(而我的c + +代碼工作正常)。我確實使用了「extern」C「」作爲libjpeg頭文件。將libjpeg庫鏈接到共享庫,並且libjpeg在運行時未定義
這裏是我的靜態libjpeg.a(libjpeg的建成的libjpeg渦輪的一部分,並改名爲libjpeg151.a)構建腳本:
outputName=$libDir/libMyLib.so
g++ -DNDEBUG -O3 -march=native -mfpmath=sse -Ofast -flto -funroll-loops -fPIC -w -shared -o $outputName \
-I$jdkDir/include -I$jdkDir/include/linux -std=c++11 -pthread \
-L$libDir/SEngineLibraries/libjpegTurbo151Linux -ljpeg151 \
myCode.cpp
,並安裝了一個共享的版本(與libjpeg的渦輪增壓DEB )
outputName=$libDir/libMyLib.so
g++ -DNDEBUG -O3 -march=native -mfpmath=sse -Ofast -flto -funroll-loops -fPIC -w -shared -o $outputName \
-I$jdkDir/include -I$jdkDir/include/linux -std=c++11 -pthread \
-ljpeg \
myCode.cpp
在我的Java代碼,使用libjpeg的運行代碼時,這個錯誤彈出:
symbol lookup error: /myDir/lib/libMyLib.so: undefined symbol: jpeg_std_error
以下是可能存在的問題:無論我在構建腳本中是否包含引用libjpeg的行,.so庫的大小都是固定的。
感謝解決!我試圖添加標誌,並發現靜態庫沒有鏈接。不知何故,g ++不喜歡我的標誌順序,該行可能會被忽略。 –