【发布时间】:2020-01-15 06:13:31
【问题描述】:
我正在尝试使用 Mingw 为 Windows 构建一个共享库 (.dll)。作为依赖项,共享库有一组 c 文件、头文件和几个静态库(*.a 用 mingw 构建)。当我尝试使用源文件和静态库构建共享库时,出现以下错误:“未定义的引用”。 该错误来自依赖于其他静态文件的静态库之一。
以下示例演示了我面临的问题
有一个文件 ops.c,构建为静态库
#include<stdio.h>
extern void print_num();
void print_num()
{
printf("HELLO WORLD IN OPS\n");
}
用命令编译:
gcc -c ops.c -o ops.o
ar cru libops.a ops.o
第二个文件mp4.c,也是静态库构建的
#include<stdio.h>
void print_ops_num()
{
printf("IN mp4c, will call ops\n");
print_num();
}
用命令编译:
gcc -c mp4.c -o mp4.o
ar cru libmp4.a mp4.o
列表文件 mss.c,这将与以上 2 个静态库一起构建为共享库
#include<stdio.h>
void demo_func()
{
printf("Demo dynamic build and linking \n");
print_ops_num();
print_num();
}
命令:
gcc -o libmss.dll mss.c -o mss.o -L libops.a -L libmp4.a -Wl,--out-implib=libmss.dll.a
也用在下面
gcc -o libmss.dll mss.c -o mss.o -L -lops -L -lmp4
构建共享库时出现以下错误
C:\Users\AppData\Local\Temp\cc6tISrV.o:mss.c:(.text+0x15): undefined reference to `print_ops_num'
C:\Users\AppData\Local\Temp\cc6tISrV.o:mss.c:(.text+0x1a): undefined reference to `print_num'
g:/work/temp/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\AppData\Local\Temp\cc6tISrV.o: ba
eloc address 0x0 in section `.pdata'
collect2.exe: error: ld returned 1 exit statusc ops.a ops.c ops.o
在 linux 平台上执行相同的程序时不会出现上述问题。我是新的Windows平台,有人可以帮我解决上述问题吗?
【问题讨论】:
标签: windows gcc makefile mingw