链接到c++应用程序中的C库
Linking to C Library in a C++ application
我正在Visual Studio 2010中开发一个C/c++应用程序。该解决方案有几个项目,这些项目被编译并卷成单个可执行文件。我正在尝试添加print语句来调试一些关键功能。
我在.c文件中的一个函数中添加了一个printf语句。我已经注意到<stdio.h>
。C头文件包含在某个更高的c++文件中。我知道C和c++连接器的操作方式和extern
强制行为之间存在差异。然而,我不是一个细微差别方面的专家。
代码按以下方式设置:
// proc.h
#ifdef __cplusplus
extern "C" {
#endif
void do_stuff();
#ifdef __cplusplus
}
#endif
-----------------------------------------------
// proc.c
#include "proc.h"
#include <stdio.h>
void do_stuff()
{
printf("Hello from proc.c -- do_stuff()");
// Some other stuff
}
当我构建应用程序时,我在VS输出窗口中看到以下错误消息:[proj path]common.lib(proc.obj) : error LNK2019: unresolved external symbol _printf referenced in function _do_stuff@20
我还尝试将#include <stdio.h>
放在头文件中,而不是c文件中。在这种情况下,我得到:
error LNK2001: unresolved external symbol printf
你试过用<cstdio>
代替<stdio.h>
吗?
在函数_do_stuff@20中引用的未解析的外部符号_printf
这意味着你没有链接printf函数的实现,它位于一个库中。
& lt; stdio.h>我想是在演播室吧?
转到项目的属性并转到链接器部分。在Input子部分中,您是否忽略了默认库,还是列出了要忽略的库?
printf库的位置取决于你如何链接到运行时(C/c++部分,代码生成小节——查看"运行时库")。这个KB中的表告诉您对于"Runtime Library"的每个值使用哪个标准的.lib
http://msdn.microsoft.com/en-us/library/6wtdswk0 (v = vs.71) . aspx
要弄清楚发生了什么,您可以在链接器行中添加/VERBOSE:LIB,它将告诉您它所查找的每个库(在链接器部分的命令行小节中执行此操作)
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?