Создать общую библиотеку с неопределенной ссылкой, используя различия g cc, Unix / Windows - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу создать простую библиотеку с некоторой неопределенной ссылкой, как вы можете видеть в 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 нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...