Cygwin 安装没有共享库,或者我应该如何激活共享库?

Cygwin install does not have shared libraries, or how should I activate the shared libraries?

我是 Cygwin 的新手 - 希望有人能为我指明正确的方向。我希望能够选择使用共享库来编译我的代码。但是,到目前为止,好像一直都是用静态库,也不知道到底哪里做错了。

我在 Windows 10 计算机上安装了 Cygwin。创建了一个文件: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

其中 none 个符号已分配地址。这一切都很好。

然后,我使用以下链接: $ 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 puts@@GLIBC_x.x.x`.

好像我没有共享库,或者我没有正确使用该过程。那有什么问题呢?谢谢。

使用 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 共享库的外部符号