无法在 Eclipse 中使用 gcc -shared 找到库来构建 dll
Cannot find library using gcc -shared in Eclipse to build a dll
我正在尝试在 Eclipse 的 C 程序中使用我刚刚在 Windows 上使用 MinGW 编译的 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
找不到库路径,因为 $(LIBRARY_PATH)
之前缺少 -L
。来自 gcc 人:
-Ldir
Add directory dir to the list of directories to be searched for -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"`
注意构建命令行最好使用其他环境变量名,因为LIBRARY_PATH
是gcc直接使用的:
LIBRARY_PATH
The value of LIBRARY_PATH
is a colon-separated list of directories,
much like PATH
. When configured as a native compiler, GCC tries the
directories thus specified when searching for special linker files, if
it can't find them using GCC_EXEC_PREFIX
. Linking using GCC also uses
these directories when searching for ordinary libraries for the -l
option (but directories specified with -L
come first).
我正在尝试在 Eclipse 的 C 程序中使用我刚刚在 Windows 上使用 MinGW 编译的 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
找不到库路径,因为 $(LIBRARY_PATH)
之前缺少 -L
。来自 gcc 人:
-Ldir
Add directory dir to the list of directories to be searched for-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"`
注意构建命令行最好使用其他环境变量名,因为LIBRARY_PATH
是gcc直接使用的:
LIBRARY_PATH
The value ofLIBRARY_PATH
is a colon-separated list of directories, much likePATH
. When configured as a native compiler, GCC tries the directories thus specified when searching for special linker files, if it can't find them usingGCC_EXEC_PREFIX
. Linking using GCC also uses these directories when searching for ordinary libraries for the-l
option (but directories specified with-L
come first).