В установке Cygwin нет общих библиотек, или как мне активировать общие библиотеки? - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в Cygwin, так что надеюсь, кто-нибудь может указать мне правильное направление. Я хотел бы иметь возможность использовать общие библиотеки для компиляции моего кода. Однако до сих пор кажется, что он всегда использует библиотеку stati c, и я не знаю, где именно я сделал ошибку.

Я установил Cygwin на свой компьютер Windows 10. Создал файл: test.c, который содержит:

    #include <stdio.h>

    const char msg[] = "Hello, world.";

    int main(void){
        puts (msg);
        return 0;
    }

Затем я скомпилировал его с помощью: $ gcc -Wall -c test.c -o test.o
Затем я проверил символы, используя: $ nm test.o

Это дает мне то, что я ожидал:

                 U __main
0000000000000000 T main
0000000000000000 R msg
                 U puts

где ни одному из символов еще не назначены адреса. Все в порядке.

Затем я связал его следующим образом: $ gcc -Wall test.o –o test

Затем проверил символы, как показано ниже: $ nm test

Я получил следующее:

0000000100401080 T main
0000000100401000 T mainCRTStartup
0000000100401640 T malloc
0000000100403000 R msg
0000000100401650 T posix_memalign
00000001004010d0 T puts

в то время как я ожидал, что символ puts будет чем-то вроде U put @@ GLIBC_x.xx`.

Похоже, у меня не было общих библиотек, или я ' m неправильно использует процесс. Что не так? Спасибо.

1 Ответ

1 голос
/ 13 июля 2020

с использованием objdump

objdump -x test.exe 

        DLL Name: cygwin1.dll
        vma:  Hint/Ord Member-Name Bound-To
        813c       15  __cxa_atexit
        814c       46  __main
        8158      108  _dll_crt0
        8164      115  _impure_ptr
        8174      257  calloc
        8180      373  cygwin_detach_dll
        8194      375  cygwin_internal
        81a8      403  dll_dllcrt0
        81b8      579  free
        81c0      909  malloc
        81cc     1015  posix_memalign
        81e0     1170  puts
        81e8     1196  realloc

, поэтому puts - это внешний символ, взятый из cygwin1.dll разделяемой библиотеки

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