Visual Studio 2017调用C函数遇LNK2019未解析外部符号错误
解决LNK2019:未解析外部符号
_triangulate的问题 嘿,这个LNK2019错误其实是链接器在找triangulate函数的实现时,找不到对应的二进制代码。你已经用extern "C"搞定了C/C++名称修饰的问题,那接下来可以从这几个方向排查:
1. 把Triangle的C源码加入你的项目
链接器需要看到triangulate的实现代码才行,你得把下载到的triangle.c文件添加到GLTests项目里:
- 右键你的GLTests项目 → 添加 → 现有项
- 找到你下载的
triangle.c文件,选中它添加到项目中
添加之后,VS编译的时候会自动把这个C文件编译成目标文件,链接时就能找到_triangulate符号了。
2. 确保C源码用C规则编译
因为你是在C++项目里编译C代码,得给triangle.c单独设置编译规则:
- 右键项目里的
triangle.c文件 → 属性 - 跳转到配置属性 → C/C++ → 高级,把编译为改成
C代码(/TC) - 点确定之后重新编译项目
这样能避免C编译器用C的语法规则去编译C源码,减少不必要的兼容性问题。
3. 核对函数声明和实现的一致性
打开triangle.h和triangle.c,仔细检查triangulate的函数声明和实现是不是完全一致:
- 参数的类型、数量,返回值类型都得一模一样
- 比如头文件里声明的是
void triangulate(int*, double*),那源码里的实现也得是void triangulate(int*, double*),不能有任何差异
要是声明和实现对不上,链接器也认不出对应的符号。
4. 用预编译库的话要配置链接器(如果适用)
如果你没直接加源码,而是用编译好的静态/动态库:
- 右键项目 → 属性 → 链接器 → 输入,在附加依赖项里加上对应的库文件(比如
triangle.lib) - 再到链接器 → 常规里,把库文件所在的路径添加到附加库目录里
不过个人更推荐直接加源码到项目,这样排查问题会更简单。
最后一步验证
做完上面的操作后,先清理一下项目(菜单里点生成→清理解决方案),然后重新生成整个解决方案,应该就能搞定这个LNK2019错误了。
内容的提问来源于stack exchange,提问作者Connor McDermott
相关产品推荐
相关产品推荐

