我正在将 ac 程序编译为要导入Ctypes
到 python 中的共享库。这些是我遵循的步骤:
cc -c -fPIC simplepbc.c -lcrypto -lpbc -lgmp -o ibc.o
cc -shared ibc.o -lcrypto -lpbc -lgmp -Wl,-soname,libibc.so.1 -o libibc.so.1.0.1
制作共享库时建议不要使用-c
,因为编译后不会链接(我在这里的一些帖子上看到过,我得到链接后会发布链接)。但我注意到,当我删除时-c
,会弹出这些错误:
ibc.o: In function `_fini':(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first defined here
ibc.o: In function `__data_start':
(.data+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginS.o:(.data.rel+0x0): first defined here
ibc.o: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtendS.o:(.dtors+0x0): multiple definition of `__DTOR_END__'
ibc.o:(.dtors+0x8): first defined here
/usr/bin/ld: error in ibc.o(.eh_frame); no .eh_frame_hdr table will be created.
collect2: ld returned 1 exit status
所以我添加-c
了,错误消失了。另外,我也可以从 ctypes 导入库,没有任何问题。以后会不会惹麻烦?
使用或不使用 -c 进行编译时会出现哪些问题?