在Eclipse中使用gcc -shared找不到库来构建一个dll

时间:2015-09-26 17:53:30

标签: c gcc ffmpeg mingw

我正在尝试使用我刚刚在Eclipse中使用MinGW在Windows上编译的FFMPEG库。我已经设法构建一个简单的HelloJNI.c文件并运行它:

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

1 个答案:

答案 0 :(得分:0)

由于-L之前缺少$(LIBRARY_PATH),因此无法找到库路径。来自gcc man:

  

-L dir
将目录 dir 添加到要搜索-l的目录列表中。

因此,如果LIBRARY_PATH包含所需库的目录,而其他所有库都可以,则以下内容应该有效:

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"`

请注意,最好使用其他一些环境变量名来构建命令行,因为gcc直接使用LIBRARY_PATH

  

LIBRARY_PATH
  LIBRARY_PATH的值是以冒号分隔的目录列表,   很像PATH。当配置为本机编译器时,GCC会尝试使用   搜索特殊链接器文件时指定的目录,如果   它无法使用GCC_EXEC_PREFIX找到它们。使用GCC链接也使用   搜索-l的普通库时这些目录   选项(但首先使用-L指定的目录)。

相关问题