草庐IT

c++ - 针对库的静态链接实际上做了什么?

假设我有一个名为libfoo的库,其中包含一个类、一些静态变量、可能带有“C”链接的内容以及一些其他函数。现在我有一个如下所示的主程序:intmain(){return5+5;}当我编译和链接它时,我链接到libfoo。这会有什么影响吗?我的可执行文件的大小会增加吗?如果是这样,为什么?静态变量或其地址是否被复制到我的可执行文件中?如果有类似的问题或者我在任何方面都特别愚蠢,我们深表歉意。 最佳答案 它不会在现代链接器中做任何事情,因为它知道可执行文件实际上并不使用libfoo的符号。在我的系统上使用gcc4.4.1和ld2.20:

c++ - 列出未使用的符号

我想从一个大型项目中删除无效代码,并希望从未使用的符号开始。无论如何让链接器列出它已经优化掉的未使用的符号?我将GNU链接器(LD)与GCC一起使用。否则,任何Binutils(readelf或objdump)都可以执行相同的功能吗? 最佳答案 大多数编译器/链接器优化掉未使用的符号。如果您在*nix系统上运行,您可以尝试在所有目标文件上使用命令“nm”,对其进行过滤和排序,以生成由这些目标文件定义的所有导出函数的列表。nm*.o|grep"^[0-9a-f]*T"|sed's/^[0-9a-f]*T//'|sort-u>symbo

c++ - 奇怪的 mingw 链接器错误与 boost ?

我已经为此工作了一段时间,但似乎无法理解这种情况-部分原因是我不完全了解发生了什么(这就是我来这里的原因)。我正在做一种boostHelloWorld如下:#include#includevoidhelloworld(){std::printf("HELLOFROMABOOSTTHREAD!");}intmain(intargc,char**argv){boost::threadt(&helloworld);t.join();}这是在Windows上。我将Boost目录存储在C:\Boost中。我运行了bootstrap和bjam,现在有一个包含所有.lib文件的stage/lib文件

c++ - 如何将 C++ 共享库与 gcc 链接

我看到了一个带有C++共享库的GCC链接,但我无法自己复制它。所以首先我创建了一个带有测试函数的C++库:g++-shared-olibtest.sotest.c然后我有一个测试主函数,它调用库函数并像这样编译它gcc-oprog.outmain.c-L.-ltest然后我收到错误undefinedreferenceto'testfunc'我认为这是由库中的不同引用引起的...C将函数命名为testfunc,而C++将函数命名为[somestuff]__testfunc[maybeagainsomestuff]。我也试过用gcc-oprog.outmain.c-l:libtest.so

c++ - 许多 : 'Apple Mach-O Linker Errors'

我在Xcode中制作了一个使用DropBoxAPI的iPhone应用程序。我遇到了23个错误,它们都被命名为AppleMach-OLinkerErrors。我已将我的二进制文件与dropbox库以及:SystemConfiguration、QuartzCore、Security、CFNetwork、CoreGraphics、UIKit和Foundation链接起来。我并没有使用所有这些框架,但DropBox告诉我必须导入其中的一些,而我正在使用其余的。我该怎么办?这是错误之一:Ld/Users/Zach/Library/Developer/Xcode/DerivedData/SnapD

c++ - 使用自动工具和替代工具的优势

我有一个适度的C++项目。我正在尝试为此使用autotools,但发现它非常复杂。关于何时使用自动工具以及何时可以不用它的准则是什么?什么是(简单的)替代方案?我想使用autotools的主要原因是它完整的makeinstall支持。有更简单的选择吗?理想情况下,我想要EclipseCDT支持的东西。 最佳答案 对于makeinstall支持,您只需要automake。一个简单的Makefile.am文件很容易制作:LIBS+=-lsome-lib-lsome_other_libbin_PROGRAMS=hellonoinst_HE

c++ - 如何从C++动态调用汇编函数?

要求:对于某些项目,我们有独特的要求。该应用程序支持一种表达式语言,该语言允许用户定义自己的复杂表达式,这些表达式可以在运行时(每秒数百次)求值,并且需要在计算机级别执行才能提高性能。工作:我们的表达式解析器将脚本完美地转换为相应的汇编语言例程。我们通过静态链接用我们的C测试程序生成的目标文件进行了检查,它们产生了正确的结果。由于客户端可以随时更改脚本,因此我们的程序(在运行时)检测到更改,并调用解析器,该解析器生成相应的汇编例程。然后,我们从后端调用汇编器以创建目标代码。问题HowcanwecallthisassemblyroutinedynamicallyfromtheC++pro

c++ - 具有虚函数的类,当派生自 QObject 时,会导致链接错误

下面是运行良好的代码classHttpService{public:virtual~HttpService();//implementedin.cppprotected:HttpService(structMHD_Connection*conn){}};classHttpFileService:publicHttpService{public:virtual~HttpFileService();//implementedin.cppprotected:HttpFileService(structMHD_Connection*conn):HttpService(conn){}};现在,当

c++ - 我如何正确地将 asm 文件链接到 C++?

这是一个硬件问题,我已经完成了所有编码,但我无法将asm与C++链接,我使用的是WindowsVisualStudio2010,我将主要文件放在源文件中,将我的asm文件放在资源文件中,当我尝试编译它只会给我一个链接错误1>------Buildstarted:Project:clearArray,Configuration:DebugWin32------1>clearArray.cpp1>clearArray.obj:errorLNK2019:unresolvedexternalsymbol_clearPointerOpreferencedinfunction_main1>clea

c++ - 编译器错误与链接器错误?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。刚刚阅读EffectiveC++,他多次提到“链接器错误”,而不是编译器错误。什么是“链接器错误”?它们与“编译器错误”有何不同?规则/解释是否基于一组类别以从逻辑上记住这一点?