digitalmars.D - D Linking library behaviour
- bioinfornatics (38/38) Nov 09 2012 Hi,
- Maxim Fomin (3/5) Nov 09 2012 You should create an object file and then make a shared library
- bioinfornatics (6/12) Nov 09 2012 the problem is not how to create a library the command given
- Maxim Fomin (12/25) Nov 09 2012 If I understood right, the problem is in extra linkage. Using
- bioinfornatics (2/30) Nov 09 2012 Thanks good to see that gcc do not put extra link as does ldc
Hi, I see a problem with ldc and maybe other compiler as the same problem. When I create a library as : --------------- libFoo.d --------------- size_t add( size_t a , size_t b ){ return a + b ; } ---------------------------------------- ----------------- Terminal ------------- $ ldc2 -shared libFoo.d -of libFoo.so.1 -soname=libFoo.so.1 $ ldd libFoo.so.1 linux-vdso.so.1 => (0x00007fff14000000) libphobos-ldc.so.59 => /lib64/libphobos-ldc.so.59 (0x00007fb01a820000) librt.so.1 => /lib64/librt.so.1 (0x00007fb01a618000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fb01a410000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb01a1f0000) libm.so.6 => /lib64/libm.so.6 (0x00007fb019ef0000) libc.so.6 => /lib64/libc.so.6 (0x00007fb019b38000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fb019920000) /lib64/ld-linux-x86-64.so.2 (0x0000003e6c000000) ---------------------------------------- libFoo library got some extra link which will never be used by libFoo as: - librt - libpthread - libm - libc I have try to said to the linker to use only link needed with: ----------------- Terminal ------------- $ ldc2 -shared libFoo.d -of libFoo.so.1 -soname=libFoo.so.1 -L--as-needed ---------------------------------------- --as-needed flag seem to be used in this case http://tinyurl.com/bfbuhpx but it do not remove these extra link maybe they are hardcoded. So i would like to know: - if other compiler has same beehaviour ? - if --as-needed flag is safe ?
Nov 09 2012
On Friday, 9 November 2012 at 08:22:53 UTC, bioinfornatics wrote:Hi, ...You should create an object file and then make a shared library from it.
Nov 09 2012
On Friday, 9 November 2012 at 08:28:40 UTC, Maxim Fomin wrote:On Friday, 9 November 2012 at 08:22:53 UTC, bioinfornatics wrote:the problem is not how to create a library the command given below works fine. If i use generate object file with model FPIC and after create the lib from these file the problem is same. the generated library has some unused link. Could you do the try with both gdc/ldc to know if that is same?Hi, ...You should create an object file and then make a shared library from it.
Nov 09 2012
On Friday, 9 November 2012 at 09:08:29 UTC, bioinfornatics wrote:On Friday, 9 November 2012 at 08:28:40 UTC, Maxim Fomin wrote:If I understood right, the problem is in extra linkage. Using your libFoo.d: linux-vdso.so.1 (0x00007fff87307000) libc.so.6 => /lib64/libc.so.6 (0x00007f57b7f50000) /lib64/ld-linux-x86-64.so.2 (0x00007f57b8517000) I have no gdc/ldc so I cannot tell which options should you use, but I believe it is possible by using similar method: generating object file and manually creating library from that file.On Friday, 9 November 2012 at 08:22:53 UTC, bioinfornatics wrote:the problem is not how to create a library the command given below works fine. If i use generate object file with model FPIC and after create the lib from these file the problem is same. the generated library has some unused link. Could you do the try with both gdc/ldc to know if that is same?Hi, ...You should create an object file and then make a shared library from it.
Nov 09 2012
On Friday, 9 November 2012 at 10:41:29 UTC, Maxim Fomin wrote:On Friday, 9 November 2012 at 09:08:29 UTC, bioinfornatics wrote:Thanks good to see that gcc do not put extra link as does ldcOn Friday, 9 November 2012 at 08:28:40 UTC, Maxim Fomin wrote:If I understood right, the problem is in extra linkage. Using your libFoo.d: linux-vdso.so.1 (0x00007fff87307000) libc.so.6 => /lib64/libc.so.6 (0x00007f57b7f50000) /lib64/ld-linux-x86-64.so.2 (0x00007f57b8517000) I have no gdc/ldc so I cannot tell which options should you use, but I believe it is possible by using similar method: generating object file and manually creating library from that file.On Friday, 9 November 2012 at 08:22:53 UTC, bioinfornatics wrote:the problem is not how to create a library the command given below works fine. If i use generate object file with model FPIC and after create the lib from these file the problem is same. the generated library has some unused link. Could you do the try with both gdc/ldc to know if that is same?Hi, ...You should create an object file and then make a shared library from it.
Nov 09 2012