一次undefined reference to ***的编译错误记录

马谦马谦马谦 2018年10月8日18:50:15 发表评论
文章最后编辑于:2018-10-18 18:52:15

一、问题描述

在编译C++程序时,遇到以下问题:

看到错误的第一直觉是共享库出问题了,因为以前出现这个问题都是因为库没有加进来,但是反复确认过后发现共享库并没有问题。

第一:编译的时候使用-l选项包含了库文件,并且库里面的函数也存在。

第二:库确实存在,不然也不会报上面的错误了,报的错误应该是:

试了各种方法都无效,百思不得其解,最后无意间发现竟然是c和c++符号表不兼容导致的。因为库是c编译的,程序是c++编译的,c和c++的符号表规则不一致,导致编译时找不到符号,因此编译报错。

二、重现

准备一个库libadd.so和一个源文件main.cpp

add.hadd.c的内容:

编译libadd.so能够正常编译,然后编译main:

此时编译就报错:

解决方案

在add.h中使用宏定义把函数声明为c导出的函数:

再编译就能通过了。

本文共执行42次查询,耗时0.274秒!
马谦马谦马谦

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: