2015-05-25 53 views
1

我使用GCC從兩個* .a(歸檔文件)創建共享對象庫。我稱這些物品─GCC: - 整個歸檔和 - 無整個歸檔選項

  1. How to force gcc to link an unused static library
  2. How to include all objects of an archive in a shared object?

並創建了一個命令行 -

gcc -shared -o libmain.so main.o -Wl,--whole-archive -lgdiplus -lsqlite3 -Wl,--no-whole-archive 

這裏main.o編譯時-fPIC選項和用於連接創建名爲libmain.so的最終輸出文件。但是當我檢查我的輸出時,它似乎是空的。

$># nm libmain.so 
00000000002005d0 a _DYNAMIC 
0000000000200788 a _GLOBAL_OFFSET_TABLE_ 
       w _Jv_RegisterClasses 
00000000002005a8 d __CTOR_END__ 
00000000002005a0 d __CTOR_LIST__ 
00000000002005b8 d __DTOR_END__ 
00000000002005b0 d __DTOR_LIST__ 
0000000000000598 r __FRAME_END__ 
00000000002005c0 d __JCR_END__ 
00000000002005c0 d __JCR_LIST__ 
00000000002007a8 A __bss_start 
       w [email protected]@GLIBC_2.2.5 
0000000000000500 t __do_global_ctors_aux 
0000000000000440 t __do_global_dtors_aux 
00000000002005c8 d __dso_handle 
       w __gmon_start__ 
00000000002007a8 A _edata 
00000000002007b8 A _end 
0000000000000538 T _fini 
00000000000003e0 T _init 
0000000000000420 t call_gmon_start 
00000000002007b0 b completed.6145 
00000000002007a8 b dtor_idx.6147 
00000000000004ec T foo 
00000000000004c0 t frame_dummy 

理想情況下,這應該包含來自兩個* .a文件的所有符號,對吧?

有人可以指導這裏有什麼問題嗎?我正在使用RHEL 5.5 x64和GCC 4.1.2。

感謝, OMKAR

+0

名稱在命令行中明確,即/path/to/libsqlite3.a而不是-lsqlite3的檔案。請注意,您還需要使用-fPIC構建的庫。 –

+0

爲什麼在你想要使用的時候使用gcc是ld? – stark

+1

你可能不會使用靜態庫。 –

回答

-2

嘗試:

gcc -shared -o libmain.so main.o -Wl,--whole-archive gdiplus sqlite3 -Wl,--no-whole-archive