日期:2014-05-16  浏览次数:20784 次

链接 静态库 和 .o 文件 生成 动态库中导出符号的问题
需求是这样的:假如我现在有两个文件 main.o 和 libmylib.a  
main.o中包含对用户的接口函数
libmylib.a中包含有一些底层的API,主要为main.o服务。但是其中也有一些对用户开放的接口

现在我想把两者链接成一个动态库
gcc -shared main.o -L. -lmylib -o test.so

问题出来了,nm -D test.so时候,libmylib.a中没有被main.o调用函数符号,不可见

哪位高手能指点一二呢?小弟感激不尽~~~~~
动态库 导出 静态库 符号

------解决方案--------------------
你看看这个吧
http://bbs.csdn.net/topics/390573281

------解决方案--------------------
下面的命令
gcc -shared main.o -L. -lmylib -o test.so

会把 libmylib.a中被main.o调用到的函数所在的.o的代码拷贝到test.so中;
注意:是以文件为单位的, 比如libmylib.a中的foo.o有一个函数被main.o中的函数调用的话,
整个foo.o都会拷贝进test.so中,结果就是foo.o中的外部符号,在test.so中都是可见的了。


#
# Makefile
#


all:
        gcc -fPIC -c *.c
        ar crv libfb.a foo.o bar.o
        gcc -shared -o libdemo.so demo.o -L. -lfb




/**
 * @file        bar.c
 * @brief       
 */

#include <stdio.h>

int bar(void)
{
        return 0;
}



/**
 * @file        demo.c
 * @brief       
 */

#include <stdio.h>

int foo(void);

int demo(void)
{
        foo();
        return 0;
}



/**
 * @file        foo.c
 * @brief       
 */

#include <stdio.h>