GCC: - 整个存档和--no-whole-archive选项

时间:2015-05-25 12:51:37

标签: c++ c gcc linker

我正在使用GCC从两个* .a(存档文件)创建一个共享对象库。我提到了这些文章 -

  1. How to force gcc to link an unused static library
  2. How to include all objects of an archive in a shared object?
  3. 并创建一个命令行 -

    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 __cxa_finalize@@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

1 个答案:

答案 0 :(得分:-2)

尝试:

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