2015-09-26 33 views
0

我想在Eclipse的C程序中使用我在Windows上使用MinGW編譯的FFMPEG庫。我已成功地建立一個簡單的HelloJNI.c文件並運行它:在Eclipse中無法使用gcc -shared查找庫來構建DLL

gcc $(INCLUDES) -c -g -w HelloJNI.c 
gcc -shared -o $(BIN_DIR)/hello.dll HelloJNI.o 

我現在正在試圖編譯使用FFMPEG一個ffmpeg_native.c文件,但我得到的錯誤運行以下:

LIBRARY_PATH = -L:"c:/Dev/msys-1.0/local/lib" -L:"c:/Dev/msys-1.0/local" 
INCLUDES = -I$(SRC_DIR) -I"c:/Dev/msys-1.0/local/include" -I"c:/Program Files/Java/jdk1.8.0_45/include" -I"c:/Program Files/Java/jdk1.8.0_45//include/win32" 
BIN_DIR = ../bin 

gcc $(INCLUDES) -c -g -w ffmpeg_native1.1.4.c 
gcc -shared -o $(BIN_DIR)/exportnative.dll ffmpeg_native1.1.4.o $(LIBRARY_PATH) -lffmpeg -lavcodec -lx264 -lavformat -lavutil -lswscale 

第一線運行正常,但第二個顯示輸出:

c:/Dev/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.3/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lavcodec 
[etc for all libraries] 

我百思不得其解,因爲我能夠運行在MinGW的成功如下:

ld -o /local/libffmpeg.so -L/local/lib -lavcodec -lx264 -lavformat -lavutil -lswscale 

回答

0

由於-L$(LIBRARY_PATH)之前缺失,因此無法找到庫路徑。從GCC人:

-L DIR
添加目錄DIR到的目錄列表要搜索-l

所以,如果LIBRARY_PATH包含所需的庫和everyting目錄以外的是以下罰款應該工作:

gcc -shared -o $(BIN_DIR)/exportnative.dll ffmpeg_native1.1.4.o -L$(LIBRARY_PATH) -lffmpeg -lavcodec -lx264 -lavformat -lavutil -lswscale 

把結腸:-L與路徑之間是不需要的。下面的列表應該被添加到命令行:

-L"c:/Dev/msys-1.0/local/lib" -L"c:/Dev/msys-1.0/local"` 

注意,最好是使用一些其他的環境變量名構建命令行,因爲LIBRARY_PATH所使用的GCC直接:

LIBRARY_PATH
LIBRARY_PATH的值是一個冒號分隔的列表, 很像PATH。當配置爲本地編譯器時,如果 使用GCC_EXEC_PREFIX找不到它們,GCC會在搜索特殊鏈接器文件時嘗試搜索指定的 目錄。在搜索普通庫時,使用GCC進行鏈接時也會使用 這些目錄來尋找-l 選項(但首先使用-L指定的目錄)。

+0

抱歉,應該指定LIBRARY_PATH是什麼。 -L已包含在內。修正了這個問題。 – tishu

+0

@tishu你不應該把冒號':'介於'-L'和路徑之間。它應該是'-L「c:/Dev/msys-1.0/local/lib」'。 –

+0

當然!謝謝! – tishu