相关疑难解决方法(0)

我怎么看C/C++源文件在Visual Studio预处理后?

比方说,我有许多预处理指令源文件.是否有可能看到它的外观预处理器是用它做之后?

c c++ debugging visual-studio-2005 c-preprocessor

201
推荐指数
8
解决办法
9万
查看次数

C++链接如何在实践中发挥作用?

C++链接如何在实践中发挥作用?我正在寻找的是关于链接如何发生的详细解释,而不是链接的命令.

关于编译已经有类似的问题,但没有详细说明:编译/链接过程如何工作?

c++ linker

32
推荐指数
3
解决办法
2万
查看次数

为什么静态和动态可链接库不同?

如果它们都包含已编译的代码,为什么我们不能在运行时加载"静态"文件,为什么我们不能在编译时链接动态库?为什么需要单独的格式来包含"独立"代码?什么需要存储哪个保证差异?

language-agnostic linker loader

28
推荐指数
3
解决办法
1886
查看次数

为什么调试器不知道#define'd常量?

在调试我的代码时,我经常想知道#defined'd常量的值.但调试器似乎并不知道它们的值.这意味着我必须围绕查看包含路径等来查找#define行.是否有一些技巧可以让这更容易?

更新:我不得不向Tony D授予绿色标记以详细回答标题问题,但我也赞成使用const而不是#define(我也测试了它enum也有效).最后使用F12找到原来的#define线是另一个好主意.

c++ debugging visual-studio-2015

26
推荐指数
2
解决办法
2435
查看次数

对静态成员进行未定义的引用意味着什么?

我刚刚写了一个包含一些静态数据成员的类,但现在我收到有关"未定义引用"的错误.为什么这不起作用?我究竟做错了什么?

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ c++-faq

18
推荐指数
2
解决办法
8779
查看次数

海报与C语言的8个翻译阶段

有没有人引用海报/单页pdf或类似的东西与C语言的八个翻译阶段列表(第一个是三字母翻译)?我想在我的电脑旁边的墙上挂一个印刷品.

更新:抱歉忘记指定.我对C90很感兴趣(虽然C99可能非常接近,_Pragma如pmg所说,答案是C99特定的,我想避免这种情况).

c

17
推荐指数
2
解决办法
6584
查看次数

"错误LNK2001:未解析的外部符号"

我在VC++ 2008中的程序有问题.当我编译它时,会列出以下错误.我花了很多时间在groups.google.com上查找原因,但没有评论帮助我.有人知道问题是什么吗?谢谢.

error LNK2001: unresolved external symbol "long rfl_xref_id" (?rfl_xref_id@@3JA)
error LNK2001: unresolved external symbol "struct obj_name * pat_objname_list" (?pat_objname_list@@3PAUobj_name@@A)
error LNK2001: unresolved external symbol "struct obj_name * pat_recall_objname_list" (?pat_recall_objname_list@@3PAUobj_name@@A)
error LNK2001: unresolved external symbol "wchar_t * rfl_unresolved_xref_tag" (?rfl_unresolved_xref_tag@@3PA_WA)
error LNK2001: unresolved external symbol "struct ref_pages * rfl_pages" (?rfl_pages@@3PAUref_pages@@A)
error LNK2001: unresolved external symbol "short rfl_use_regen_id" (?rfl_use_regen_id@@3FA)
error LNK2001: unresolved external symbol "long rfl_regen_id" (?rfl_regen_id@@3JA)
error LNK2001: unresolved external symbol "unsigned short rfl_list_status" (?rfl_list_status@@3GA)
error LNK2001: unresolved external symbol "unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ linker linker-errors

6
推荐指数
1
解决办法
9万
查看次数

头文件如何连接到相应的.cpp文件?

根据我所阅读和理解的内容,#include源文件中的指令(例如ex:)main.cpp只是将包含文件的内容复制到.cpp.因此,当我包含头文件时,对于ex:,yum.h所有语句yum.h都被复制到main.cpp.

头文件只有声明,实际定义将在相应的.cpp文件中,如yum.cpp.

因此,在编译时main.cpp,如何将编译器知道要查找提及任何函数的定义yum.hyum.cpp?编译器如何知道如何编译yum.cpp文件,因为在main.cpp文件或文件中都没有引用它yum.h.

另外,为什么要yum.h加入yum.cpp

这听起来像是一个愚蠢的问题.我是OOP和C++的初学者,我只是想了解发生了什么.

c++ compilation header

6
推荐指数
1
解决办法
2505
查看次数

在Linux上编译boost asio时链接错误

我已经完成了一些boost和它拥有的库的教程.

我浏览了基本的boost教程:

http://www.boost.org/doc/libs/1_52_0/more/getting_started/unix-variants.html
Run Code Online (Sandbox Code Playgroud)

它工作得很好.我遇到了asio教程的问题:

http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/tutorial/tutdaytime1/src.html
Run Code Online (Sandbox Code Playgroud)

它看起来像链接错误,但我包含与以前相同的路径:

g++ -I /usr/local/boost_1_52_0 test.cpp -o example
Run Code Online (Sandbox Code Playgroud)

错误:

/tmp/cce4EZME.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x57b): undefined reference to `boost::system::generic_category()'
test.cpp:(.text+0x587): undefined reference to `boost::system::generic_category()'
test.cpp:(.text+0x593): undefined reference to `boost::system::system_category()'
/tmp/cce4EZME.o: In function `boost::system::error_code::error_code()':
test.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()'
/tmp/cce4EZME.o: In function `boost::asio::error::get_system_category()':
test.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[_ZN5boost4asio5error19get_system_categoryEv]+0x5): undefined reference to `boost::system::system_category()'
/tmp/cce4EZME.o: In function `boost::asio::detail::posix_thread::~posix_thread()':
test.cpp:(.text._ZN5boost4asio6detail12posix_threadD2Ev[_ZN5boost4asio6detail12posix_threadD5Ev]+0x26): undefined reference to `pthread_detach'
/tmp/cce4EZME.o: In function `boost::asio::detail::posix_thread::join()':
test.cpp:(.text._ZN5boost4asio6detail12posix_thread4joinEv[_ZN5boost4asio6detail12posix_thread4joinEv]+0x2b): undefined reference to `pthread_join'
/tmp/cce4EZME.o: In function `boost::asio::detail::posix_thread::start_thread(boost::asio::detail::posix_thread::func_base*)':
test.cpp:(.text._ZN5boost4asio6detail12posix_thread12start_threadEPNS2_9func_baseE[_ZN5boost4asio6detail12posix_thread12start_threadEPNS2_9func_baseE]+0x29): undefined reference to `pthread_create'
collect2: error: …
Run Code Online (Sandbox Code Playgroud)

c++ ubuntu boost-asio

5
推荐指数
1
解决办法
4416
查看次数

链接工作究竟如何?

我理解编译过程的方式:

1)预处理:所有宏都替换为实际值,删除所有注释等.用您包含的文件的文字文本替换#include语句.

2)编译:这里不会深入挖掘,但结果是您所在的任何架构的汇编文件.

3)汇编:获取汇编文件并将其转换为二进制指令,即机器代码.

4)链接:这是我困惑的地方.此时你有一个可执行文件.但是,如果您实际运行该可执行文件会发生什 问题是你可能包含*.h文件,那些只包含函数原型?因此,如果您实际调用这些文件中的一个函数,它将没有定义,您的程序将崩溃?

如果是这样的话,那引信到底是什么的呢?它如何找到与您包含的.h相关联的.c文件,以及它如何将其注入到您的机器代码中?是否必须再次为该文件完成整个编译过程?

现在,我已经明白有两种类型的链接,动态和静态.当你为你创建的每个可执行文件重新编译库的源代码时是静态的吗?我不太明白动态链接是如何工作的.那么您编译一个可由您使用它的所有进程共享的可执行库?这怎么可能呢?它不会在尝试访问它的进程的地址空间之外吗?另外,对于动态链接,您是否仍需要在某个时刻编译库?是不是只是坐在那里等待使用?什么时候编译?

您是否可以通过上述内容清除所有误解,错误的假设并替换您正确的解释?

c c++ assembly linker compilation

5
推荐指数
1
解决办法
856
查看次数