草庐IT

c++ - C++ 函数模板特化的可见性

假设我有fileA.h它声明了一个类classA带模板函数SomeFunc().该函数直接在头文件中实现(与模板函数一样)。现在我添加了SomeFunc()的专门实现(如SomeFunc())在fileA.C(即不在头文件中)。如果我现在调用SomeFunc()来自其他一些代码(可能也来自另一个库),它会调用通用版本还是特化版本?我现在有这个问题,类和函数存在于一个库中,由两个应用程序使用。一个应用程序正确地使用了特化,而另一个应用程序使用了通用形式(这会导致稍后出现运行时问题)。为什么有区别?这可能与链接器选项等有关吗?这是在Linux上,使用g++4.1.2。

c++ - gtest.lib 和 gtest_main.lib 有什么区别?

Google的C++测试框架有两个输出库:一个是gtest.lib,另一个是gtest_main.lib。根据NikReiman'sanswer在howtosetupgtestwithVisualStudio,我们应该链接到gtest_main.lib但我链接到gtest.lib并且我拥有的示例测试用例运行良好。这两个库有什么区别,我链接到哪个库有关系吗? 最佳答案 唯一合理的区别是gtest_main.lib提供了测试应用程序入口点的默认实现(即main函数):来自GettingstartedwithGoogleC++Testin

c++ - gtest.lib 和 gtest_main.lib 有什么区别?

Google的C++测试框架有两个输出库:一个是gtest.lib,另一个是gtest_main.lib。根据NikReiman'sanswer在howtosetupgtestwithVisualStudio,我们应该链接到gtest_main.lib但我链接到gtest.lib并且我拥有的示例测试用例运行良好。这两个库有什么区别,我链接到哪个库有关系吗? 最佳答案 唯一合理的区别是gtest_main.lib提供了测试应用程序入口点的默认实现(即main函数):来自GettingstartedwithGoogleC++Testin

c++ - 与旧版本的 libstdc++ 链接

安装新的构建机器后,我发现它带有标准C++库的6.0.10-rw-r--r--1rootroot10192162009-01-0212:15libstdc++.so.6.0.10但是,我们的许多目标机器仍然使用旧版本的libstdc++,例如:-rwxr-xr-x1rootroot985888Aug1921:14libstdc++.so.6.0.8显然ABI在最后两个0.0.1中发生了变化,因为尝试运行程序会导致/usr/lib/libstdc++.so.6:version`GLIBCXX_3.4.9'notfound我尝试显式安装旧版本的gcc,但没有帮助。升级目标机器是我无法控制的

c++ - 与旧版本的 libstdc++ 链接

安装新的构建机器后,我发现它带有标准C++库的6.0.10-rw-r--r--1rootroot10192162009-01-0212:15libstdc++.so.6.0.10但是,我们的许多目标机器仍然使用旧版本的libstdc++,例如:-rwxr-xr-x1rootroot985888Aug1921:14libstdc++.so.6.0.8显然ABI在最后两个0.0.1中发生了变化,因为尝试运行程序会导致/usr/lib/libstdc++.so.6:version`GLIBCXX_3.4.9'notfound我尝试显式安装旧版本的gcc,但没有帮助。升级目标机器是我无法控制的

c++ - 为什么不鼓励静态链接 glibc?

大多数在线资源表明您可以静态链接glibc,但不鼓励这样做;例如centospackagerepo:Theglibc-staticpackagecontainstheClibrarystaticlibrariesfor-staticlinking.Youdon'tneedthese,unlessyoulinkstatically,whichishighlydiscouraged.这些消息来源很少(或从不)说明为什么这是一个坏主意。 最佳答案 其他答案给出的理由是正确的,但不是最重要的原因。glibc不应该被静态链接的最重要原因是它在

c++ - 为什么不鼓励静态链接 glibc?

大多数在线资源表明您可以静态链接glibc,但不鼓励这样做;例如centospackagerepo:Theglibc-staticpackagecontainstheClibrarystaticlibrariesfor-staticlinking.Youdon'tneedthese,unlessyoulinkstatically,whichishighlydiscouraged.这些消息来源很少(或从不)说明为什么这是一个坏主意。 最佳答案 其他答案给出的理由是正确的,但不是最重要的原因。glibc不应该被静态链接的最重要原因是它在

c++ - 为什么我得到 "undefined reference to ` dladdr'"即使使用 -ldl 这个简单的程序?

我正在处理LLVMTutorial,但我在编译时遇到了麻烦。我写了一个重现该问题的最小示例:#include"llvm/Module.h"#include"llvm/LLVMContext.h"intmain(intargc,char**argv){llvm::Module*module=newllvm::Module("test",llvm::getGlobalContext());return0;}当我尝试编译时,我得到一堆“undefinedreference”错误:clang++`llvm-config--cxxflags`-c-otest.otest.cppclang++te

c++ - 为什么我得到 "undefined reference to ` dladdr'"即使使用 -ldl 这个简单的程序?

我正在处理LLVMTutorial,但我在编译时遇到了麻烦。我写了一个重现该问题的最小示例:#include"llvm/Module.h"#include"llvm/LLVMContext.h"intmain(intargc,char**argv){llvm::Module*module=newllvm::Module("test",llvm::getGlobalContext());return0;}当我尝试编译时,我得到一堆“undefinedreference”错误:clang++`llvm-config--cxxflags`-c-otest.otest.cppclang++te

c++ - 为静态链接构建 Boost (MinGW)

我正在使用bjam为MinGW构建Boost(我正在使用系统和文件系统):bjam--toolset=gccstage它构建得很好,但我希望能够静态链接到它(我必须为最终产品提供一个文件)所以我尝试了:bjam--link=static--toolset=gccstage但我得到相同的输出。有什么想法吗?编辑连续第二个问题我在发布后不久就回答了:p我想我会把这个留给其他人。bjam--build-type=complete--toolset=gccstage肯定会构建动态和静态的。 最佳答案 我认为链接是一个属性,而不是bjam的一