自定义共享库未定义引用

4
我使用下面的代码创建了一个 .so 文件,但是当我使用 GCC 编译调用该文件中函数的文件时,会出现“undefined reference to 'outlib1'” 的错误信息。
请问我的代码或者命令有什么问题?谢谢。
操作系统:Ubuntu 11.10 编译器:gcc 4.6.1
//file name outscreen.c

#include <stdio.h>

void outlib1(void)
{
    printf("out screen func1\n");
}
//file name main.c
int main(int argc, char* argv[])
{
    outlib1();
}

gcc outscreen.c -fPIC -shared -o outscreen.so   
gcc main.c -L. -loutscreen -o call   
./call

你可以在专门的 StackExchange 网站 http://askubuntu.com/ 上提问,看看能否得到更好的答案。 - nulltoken
7
这不是Ubuntu的问题,而是一个关于链接的问题。 - Josh Lee
5
不,这里是合适的话题,不是那里。 - Mat
你是否已经创建了一个包含函数声明的头文件?这样的文件必须被包含在你的 main.c 中。 - ghik
@Mat 好的。但是 askubuntu 上说“我们欢迎关于 Ubuntu 上开发的问题。”。;) - nulltoken
显示剩余5条评论
2个回答

7

尝试:

$ gcc outscreen.c -fPIC -shared -o liboutscreen.so   
$ gcc main.c -L. -loutscreen -o call   

(请注意第一行的更改 - 第二行不变)


@jerrysea:请查看上面编辑过的答案 - 你需要更改第一个构建命令,但不要更改第二个。 - Paul R

1

这个的输出是什么?

 nm outscreen.so | grep outlib1

可能是带下划线导出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接