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