链接 静态库 和 .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>