Я хочу создать простую библиотеку с некоторой неопределенной ссылкой, как вы можете видеть в function_two. c, я называю three()
, который не определен.
header.h
void one();
void two();
void three();
function_one. c
#include <stdio.h>
#include "header.h"
void one() {
printf("one\n");
}
function_two. c
#include <stdio.h>
#include "header.h"
void two() {
printf("two\n");
three();
}
Используя Linux
, я компилирую оба файла и затем связываю их
linux:~/example$ gcc -c -Wall -Werror -fpic function_one.c
linux:~/example$ gcc -c -Wall -Werror -fpic function_two.c
linux:~/example$ gcc -shared -o library.so function_one.o function_two.o
Я могу создать библиотека, которая, очевидно, имеет three
undefined (U
)
linux:~/example$ nm library.so
0000000000000538 T _init
................
000000000000066a T one
U three
000000000000067d T two
Делая то же самое, используя MinGW
в Windows10
, я не могу собрать библиотека из-за неопределенной ссылки на функцию three
windows:/c/example$ gcc -c -Wall -Werror -fpic function_one.c
windows:/c/example$ gcc -c -Wall -Werror -fpic function_two.c
windows:/c/example$ gcc -shared -o library.dll function_one.o function_two.o
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: function_two.o:function_two.c:(.text+0x15): undefined reference to 'trhee'
collect2.exe error: ld returned 1 exit status
Почему Linux
позволяет мне создавать библиотеку, а Windows
нет?