抱歉问题标题模糊,我只是想确定一些事情。静态库不与其他静态库链接,对吗?所以当我写一个slib:A,它使用另一个:B的功能时,我必须提供的只是B到A的header,而且只有那些,即使A实际上使用了B的功能?是吗?只要使用A的exe:X,有没有指定B.lib作为链接器输入?因此在链接时,链接器采用A.lib,它基本上只知道B的函数在其代码中的某处被调用,并以某种方式从B.lib中填充该信息,使A.lib成为“完整的”,在X与它现在工作的部分链接之前?这些问题背后的动机是摆脱一些链接器警告4006和丢弃的双重定义,我认为这应该可以解决问题,如果这实际上是一种有效的方法的话。
我想知道如何在C++中使用我创建的静态库,首先是库://header:foo.hintfoo(inta);.//code:foo.cpp#includefoo.hintfoo(inta){returna+1;}然后我先编译库:g++foo.cpparrclibfoo.afoo.o现在我想在一些文件中使用这些库,例如://prog.cpp#include"foo.h"intmain(){inti=foo(2);returni;}我现在必须如何编译这些?我做了:g++-L.-lfooprog.cpp但是得到一个错误,因为找不到函数foo 最佳答案
我不确定我问的问题是否正确,但让我解释一下。首先,我阅读了这篇解释声明和定义之间区别的文章:http://www.cprogramming.com/declare_vs_define.html其次,我从之前的研究中了解到,在头文件中定义变量和函数是一种不好的做法,因为在链接阶段,您可能对同一个名称有多个定义,这会引发错误。但是,为什么类不会发生这种情况?根据另一个SO答案(Whatisthedifferencebetweenadefinitionandadeclaration?),以下将是一个类定义:classMyClass{private:public:};如果上面的定义在一个头文件
我正在尝试在Ubuntu10.04(我有一个32位系统)下构建一个非常简单的OpenGL应用程序。当我试图编译文件时,我收到错误消息:g++-L/usr/libsimple.cpp-lglut/usr/bin/ld:/tmp/ccoPczAo.o:undefinedreferencetosymbol'glEnd'/usr/bin/ld:note:'glEnd'isdefinedinDSO//usr/lib/libGL.so.1sotryaddingittothelinkercommandline//usr/lib/libGL.so.1:couldnotreadsymbols:Inval
我无法让我的项目链接到MicrosoftVisualC++2008ExpressEdition中的Boost(版本1.37.0)文件系统lib文件。文件系统库不是只有头文件的库。我一直在关注GettingStartedonWindows官方boost网页上发布的指南。以下是我采取的步骤:我使用bjam构建了完整的lib文件集:bjam--build-dir="C:\ProgramFiles\boost\build-boost"--toolset=msvc--build-type=complete我复制了/libs目录(位于C:\ProgramFiles\boost\build-boos
我有一个链接到六个库的项目,其中包括OpenCV。由于Release变体崩溃,而Debug工作正常(只是慢了很多),我想在RelWithDebInfo配置中编译我的项目。但是,包含Debug版本的OpenCV库,而不是Release(OpenCV没有RelWithDebInfo变体)。这会导致链接错误,例如:opencv_core249d.lib(alloc.obj):errorLNK2038:mismatchdetectedfor‘RuntimeLibrary’:value‘MDd_DynamicDebug’doesn’tmatchvalue‘MD_DynamicRelease’in
我想像这样在API中提供一个字符串常量:externconstchar*constSOME_CONSTANT;但是如果我在我的静态库源文件中将它定义为constchar*constSOME_CONSTANT="test";当链接到该库并使用SOME_CONSTANT时,我遇到链接器错误:Error1errorLNK2001:unresolvedexternalsymbol"charconst*constSOME_CONSTANT"(?SOME_CONSTANT@@3QBDB)从externconstchar*const声明和定义中删除指针常量(第二个const关键字)使其工作。如何使用
我一直在努力ld:librarynotfoundfor-lchaiscript_stdlib-5.3.1.soclang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)尝试链接到.so文件时。我正在使用这个命令:clang++Main.cpp-ofoo-L./-lchaiscript_stdlib-5.3.1.so我做错了什么?文件libchaiscript_stdlib-5.3.1.so与文件Main.cpp位于同一目录中。我认为-L./会将.so添加到库搜索路径中。 最佳答案
当我阅读thisquestion的已接受答案时,我有以下问题:通常,方法在头文件(.hpp或其他)中定义,并在源文件(.cpp或其他)中实现。包含“源文件”(#include)是不好的做法的主要原因之一是它的方法实现会被复制,从而导致链接错误。当一个人写的时候:#ifndefBRITNEYSPEARS_HPP#defineBRITNEYSPEARS_HPPclassBritneySpears{public:BritneySpears(){};//Heretheconstructorhasimplementation.};#endif/*BRITNEYSPEARS_HPP*/他给出了构造
我正在做一个学校项目,我从Xcode收到一些奇怪的错误。我正在使用TextMate的Command+R功能来编译项目。编译似乎工作正常,但链接失败并出现我不理解的错误消息。ld输出:ld:duplicatesymboltext_field(std::basic_istream>&)in/path/final/build/final.build/Release/final.build/Objects-normal/ppc/generics.oand/path/final/build/final.build/Release/final.build/Objects-normal/ppc/ma