【问题标题】:Undefined reference to custom shared library对自定义共享库的未定义引用
【发布时间】:2011-12-07 15:42:51
【问题描述】:

我使用下面的代码创建了一个 .so 文件,但是当我使用 GCC 编译一个调用 .so 文件中的函数的文件时,我收到“未定义对 '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 网站askubuntu.com 上问这个怎么样?
  • @nulltoken 这不是 Ubuntu 问题。这是一个连接问题。
  • @nulltoken:不,这里是主题,不是那里。
  • 您是否创建了一个带有函数声明的头文件?此类文件必须包含在您的 main.c 中。
  • @Mat 好的。但是,askubuntu 表示“我们欢迎有关 Ubuntu 开发的问题。”。 ;)

标签: c linux gcc shared-libraries


【解决方案1】:

试试:

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

(注意第一行的变化——第二行不变)

【讨论】:

  • @jerrysea:请参阅上面的编辑答案 - 您需要更改第一个构建命令,但 不是 第二个
【解决方案2】:

这个输出是什么?

 nm outscreen.so | grep outlib1

也许它是用下划线导出的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2015-11-15
    • 2023-04-09
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多