草庐IT

c++ - 源文件之间共享全局变量的问题(我正在使用包含保护)

我试图在两个.cpp文件之间共享相同的变量,它们包含相同的.h文件。但是我遇到了链接错误,告诉我我有多个定义。我觉得这很尴尬,因为我使用的是includeguard//main.cpp#include#include"shared.h"intmain(){shared_int=5;printVal();return0;}//shared.h#ifndefINCLUDE_GUARD_H#defineINCLUDE_GUARD_H#include#includeintshared_int;intprintVal();#endif//shared.cpp#include#include"sh

c++ - 链接到 boost_thread 的问题

我正在尝试将xubuntu上的boost1.47与gcc4.6和glibc2.13链接起来。到目前为止,我无法编译以下简单程序main.cpp:#include#include#includeintmain(){size_tn_threads=boost::thread::hardware_concurrency();return0;}当我编译时:g++-lboost_thread-lboost_regex-omcmain.cpp-static-lpthread/usr/local/lib/libboost_regex.a/usr/local/lib/libboost_thread.a

c++ - 正确使用cpp中的定义宏替换函数的名称

我在Ubuntu上使用Eclipse+Qualcomm库(在cpp中)+AndroidSDK。我的应用程序运行良好。如果我更改qualcomm库中的一些代码,它会编译并正常工作。问题是:我已经更改了项目的名称,并且我必须更改cpp中的一些代码(函数的名称),如果我不这样做,我会得到一个Java.lang.UNSATISFIEDLINKERROR.那是因为所有函数的名称都是Android包,如下所示:Java_org_myproject_marker_MainActivity_onQCARInitializedNative(JNIEnv*,jobject)然后我定义一个这样的宏:#def

c++ - 由于名称修改导致无法解析的外部符号

我在将XERCES函数从2.6升级到2.8时遇到链接器错误unresolvedexternalsymbol(?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QBG0@Z)我检查了xerces-c_2.8.lib,发现名称lib与我的.obj文件中的名称有点不同,如图所示?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QB_W0@Z所以我知道链接器不会找到匹配项并抛出错误。但我无法理解为什么我的.obj文件包含不同的签名。代码包括正确的头文件和来

Apple Mach -o Linker(ID)错误?

我正在尝试构建由Unity构建的这个Xcode工作区。在构建项目的最后(链接)结束时,修改项目后,我会出现AppleMach-OLinker(ID)错误。我无法打开错误选项卡,以查看到底是什么导致错误。它所说的只是“链接器命令失败了出口代码1(使用-v查看调用)。还有两个AppleMach-OLinker(ID)错误,但我不知道如何解决它们。任何帮助是极大的赞赏!我无法扩展这些标签。这是扩展的警告选项卡,两个AppleMach-OLinker(ID)警告是相同的看答案这个问题有不同的解决方案,其中之一就是设置启用比特代码至不。(我不知道为什么默认这是是的)这个问题是像鬼这样的问题。清除缓存,重

c++ - GCC 链接器找不到标准库?

我一直在用XCode开发一个学校项目。最终产品必须以带有makefile的源代码形式提交,因此我编写了一个makefile并以这种方式开始编译,以确保我有一个工作拷贝。这是我的生成文件:all:main.oStackList.oworld.oFarm.ogccmain.oStackList.oworld.oFarm.o-g-oProject1main.o:gcc-g-cmain.cppStackList.o:gcc-g-cStacklist.cppworld.cpp:gcc-g-cworld.cppFarm.cpp:gcc-g-cFarm.cppclean:rm*.oProject1编

c++ - 使用自动工具从 C++ 使用 C 代码

我正在用一些用C编写的代码编写(我的第一个)C++类,但我只能通过在externblock中声明C函数来编译C++。我的项目使用自动工具;有什么方法可以自动执行此过程,这样我就不必维护两个头文件了吗? 最佳答案 在C代码头文件中的#ifdef中使用externblock头文件开始#ifdef__cplusplusextern"C"{#endif...在头文件的末尾#ifdef__cplusplus}#endif这样它就可以同时包含在C和C++源代码中 关于c++-使用自动工具从C++使用

C++:编译器和链接器功能

我想准确了解程序编译器查看的是哪个部分,链接器查看的是哪个部分。所以我写了下面的代码:#includeusingnamespacestd;#includeclassTest{private:inti;public:Test(intval){i=val;}voidDefinedCorrectFunction(intval);voidDefinedIncorrectFunction(intval);voidNonDefinedFunction(intval);templatevoidFunctionTemplate(paramTypeval){i=val}};voidTest::Defin

c++ - 为什么当派生类调用基类的纯虚函数时 g++ 不报错?

我有一个带有纯虚函数f()的类Base。另一个类Derived派生自Base。我从Derived中调用f()。使用g++,我从链接器中得到一个错误。[agnel@dookutmp]$g++pure_virtual_function_call.cpp/tmp/ccGQLHi4.o:Infunction`Derived::f()':pure_virtual_function_call.cpp:(.text._ZN7Derived1fEv[_ZN7Derived1fEv]+0x14):undefinedreferenceto`VirtualBase::f()'collect2:error:l

c++ - 仅 header 链接

许多C++项目(例如,许多Boost库)是“仅header链接”。在普通C中这也可能吗?如何将源代码放入标题中?有没有关于它的网站? 最佳答案 执行摘要:可以,但不应该。C和C++代码在编译之前被预处理:所有header都被递归地“粘贴”到包含它们的源文件中。如果您在头文件中定义了一个函数,并且它被两个C文件包含,那么您将在每个目标文件中得到两个拷贝(OneDefinitionRule违规)。如果您的所有函数都标记为static,即在翻译单元外不可见,则您可以创建“仅header”C库。但这也意味着您将获得包含头文件的每个翻译单元中