gcc生成的动态库链接时提示函数undefined reference to

环境:使用了一个第三方库mxml,在A.h中引用mxml.h,(第三方库的头文件),A.c中完成实现代码。
编译、运行:编译运行的时候链接第三方库,输出结果正常。

这时候想要将A.c编译成.so,只提供A.h作为头文件供外部调用。

gcc -c A.c
gcc -fPIC -shared A.o -o libmya.so

生成了动态库libmya.so

gcc main.c A.h -L. -lmya  -o main

运行可执行文件main的时候报错:
图片描述

但是我通过nm命令,nm libmya.so查询我的so,这些函数是在里面的。
图片描述

为什么so库中存在这些第三方库提供的函数,但是我实际调用的时候却会报错?

阅读 12.2k
1 个回答
  1. 你nm命令看到的那些符号的“U”表示未定义的,你可以看到它们前面没有内存地址信息,这些符号是定义在你引入的mxml库中的。

  2. 你是在生成可执行程序main的失败报错的吧,如果是在编译的时候再加上-lmxml选项,并使用-L选项指定mxml库所在的目录。

  3. 运行时可能会遇到提示找不到libmxml.so**库的错误提示,可以把libmxml.so**库发布到/usr/lib64目录下,或者把libmxml.so**所在目录配置到/etc/ld.so.conf中,然后执行ldconfig即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题