gpt4 book ai didi

c - undefined reference 错误但符号存在于库中

转载 作者:行者123 更新时间:2023-12-03 22:45:46 25 4
gpt4 key购买 nike

我得到一个 undefined reference以下示例的错误。我已经看到很多与这个问题相关的问题,但相信我给出了一个剥离的、可重复的、概念性的例子,而不是其他问题中的具体问题,

动态库.h:

void printMe_dyn();

dynlib.c:
#include <stdio.h>
#include "dynlib.h"

void printMe_dyn() {
printf("I am execuded from a dynamic lib");
}

myapp.c:
#include <stdio.h>
#include "dynlib.h"

int main()
{
printMe_dyn();
return 0;
}

构建步骤:
gcc -Wall -fpic -c dynlib.c
gcc -shared -o libdynlib.so dynlib.o
gcc -Wall -L. -ldynlib myapp.c -o myapp

错误:
/tmp/ccwb6Fnv.o: In function `main':
myapp.c:(.text+0xa): undefined reference to `printMe_dyn'
collect2: error: ld returned 1 exit status

证明符号在库中:
nm libdynlib.so | grep printMe_dyn
00000000000006e0 T printMe_dyn
  • 我是否使用正确的编译器标志来构建动态
    图书馆?
  • 我提出的证明真的是明确的证明吗?
  • 可以采取哪些其他方法来诊断问题?
  • 最佳答案

    库的出现顺序很重要。

    引用 online gcc manual

    It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, foo.o -lz bar.o searches library z after file foo.o but before bar.o. If bar.o refers to functions in z, those functions may not be loaded.



    您应该将编译语句更改为
    gcc -o myapp -Wall -L. myapp.c -ldynlib 

    告诉 gcc搜索(已编译)中使用的符号 myapp.c出现在 dynlib .

    关于c - undefined reference 错误但符号存在于库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32378682/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com