草庐IT

c++ - 如何解决此链接器错误?

我正在尝试在Eclipse项目中使用已编译的库。编译很顺利,但在链接过程中出现错误。下面是在Eclipse控制台上生成的详细信息。g++-L/usr/local/lib-o"readInput"./readInput.o-llibopencv_calib3d.so-llibopencv_contrib.so-llibopencv_core.so/usr/bin/ld:cannotfind-llibopencv_calib3d.so/usr/bin/ld:cannotfind-llibopencv_contrib.so/usr/bin/ld:cannotfind-llibopencv_c

c++ - DLL 和编译器设置

许多文章和帖子都警告在链接和使用DLL时可能导致不兼容的编译器设置。如果您在使用C++编写DLL时遵循最佳实践并使用extern“C”导出函数,并且仅使用POD数据类型或坚持使用接口(interface)(纯虚拟)类,那么哪些编译器设置可能会导致问题?您如何知道哪些编译器设置会导致问题?不同的编译器会有不同的设置吗?是否有可用的VisualC++编译器设置列表? 最佳答案 这不是最终的列表,但我记得的事情:链接到不同的运行时,例如链接到主可执行文件中的调试VisualC++运行时,以及链接到要导入的DLL中的发布VisualC++运

c++ - 尝试构建共享库 g++/mac 时 undefined symbol _main

我正在尝试在Mac上构建libdecodeqr。我的C++构建和链接历史都在Windows上,所以这是一个令人兴奋的发现之旅。我终于到了要创建链接库的地步。我正在运行的命令是:g++-shared-olibdecodeqr.so.0.9.3bitstream.ocodedata.ocontainer.oecidecoder.oformatinfo.ogalois.oimagereader.olibdecodeqr.o-L/opt/local/lib-archi386-lcxcore-lcv结果是:Undefinedsymbols:"_main",referencedfrom:start

c++ - 具有相同名称的类 - 是否仅限于同一翻译单元?

假设我有以下代码:foo.hclassFoo{//...};foo.cpp#include"foo.h"//FunctionsforclassFoodefinedhere...假设Foo内置于静态库foo.lib中。现在假设我有以下内容:foo2.hclassFoo{//...};foo2.cpp#include"foo2.h"//FunctionsforclassFoodefinedhere...这被内置到一个单独的静态库foo2.lib中。现在,如果我将foo.lib和foo2.lib重新链接到一个可执行程序foo.exe中,它应该会报错吗classFoo被定义了两次?根据我的经验

c++ - 链接到 Visual Studio 2010 中的静态库

要知道的事情:我非常确定我正在使用正确的静态库(包括dllexport和所有)生成的.lib文件非常大(3M、8M等)。共享的在300K-1M左右。所以我很确定.lib文件是静态的我想在单独的解决方案中链接到这些静态库文件这是一个非托管的C/C++项目我读到我需要使用新的UI(公共(public)属性>添加新引用等等)。但是为了让它起作用,我需要将整个项目添加到我的解决方案中。有没有办法将我的项目链接到静态库(不添加其源代码)。 最佳答案 “添加新引用”是一个.NET选项,用于添加程序集引用。您不能在.NET中创建静态链接库,程序集

c++ - 为什么我必须为 LLVM 链接这些库两次?

我正在尝试编译示例LLVM程序。链接器步骤使用此命令。llvm-config-3.2--ldflags--libs这会产生以下命令。g++-obin/Debug/test-llvmobj/Debug/main.o-L/usr/lib/llvm-3.2/lib-lpthread-lffi-ldl-lm(aboatloadofLLVMlibrarieshere)但是,它无法链接。我收到这样的错误。undefinedreferencetoffi_type_float因此,我在末尾添加了-lffi和-ldl。g++-obin/Debug/test-llvmobj/Debug/main.o-L/

c++ - 包括多个编译单元中的模板代码,它会一直链接而不是内联吗?

假设我在MyHeader.h中有模板代码,然后包含在2个编译单元中,A.cpp和B.cpp.然后这两个文件实例化相同的模板函数,比如f();(后者在MyHeader.h中定义了非内联)。据我所知,发生的事情如下。编译器生成f();的代码在两个A.obj和B.obj,然后喜欢者在链接阶段丢弃其中一个符号。我的问题:这种方法总是“安全”的吗?即,是否有链接器会提示重复符号?标准对此有任何说明吗?如果是,那么我看不到任何解决方案来制作我的所有模板函数inline. 最佳答案 这始终是安全的并且包含在ODR中。§3.2/6:Therecan

c++ - C++ 链接器如何知道要使用哪些 .cpp 文件

我是一名C++学习者,我遇到了将代码分成多个文件以加快大型项目的编译过程的概念。然而,这本书没有告诉我什么,我试图在其他书籍和网络上找到它,但没有运气,链接器(在编译期间)如何知道要包含哪些文件。当我创建新文件时,我使用#include"newfile.h"将它的header连接到主文件,但是在这个header中我没有写在哪里可以找到函数的定义。所以我想象的过程是,它从主文件开始,并在那里找到与其他文件的“连接”。问题是它如何找到那些我认为不需要与其头文件同名的.cpp文件。示例:主文件:#include#include"krneki_H.h"usingnamespacestd;int

c++ - 为什么 clang++ 和 gcc/g++ 生成不同链接的可执行文件

当使用g++和clang++进行编译和链接时,期望生成的可执行文件的链接与它们的链接相同。然而,在某些情况下,尽管传入的参数相同,但clang++可执行文件似乎链接到比g++更多的库。这会导致功能差异,尤其是对于在加载和卸载时自动执行的动态链接库。为什么会这样? 最佳答案 事实证明,gcc在ubuntu--as-needed中默认启用了一项功能,这会导致gcc有效地忽略任何在链接项链中未引用其符号的库这可以在gcc中使用--no-as-needed标志禁用。或者,您可以发出-Wl,--as-needed作为clang++的第一个选项

c++ - 为内联函数定义多次,怎么可能?

下面引自C++primer书的引述让我很困惑Unlikeotherfunction,inlineandconstexprfunctionsmaybedefinedmultipletimesintheprogram.Afterall,thecompilerneedsthedefinition,notjustthedeclaration,inordertoexpandthecode.However,allofthedefinitionsofagiveninlineorconstexprmustmatchexactly.Asaresult,inlineandconstexprfunction