假设我正在创建一个使用某个库的项目,我必须在链接时提供该库的路径。在命令行或makefile中我可能有:g++...-L/path/to/mylibrary我还将把这个项目发送给其他想要使用它的人。他们系统上的路径可能不一定与我的相同。他们可能一起使用不同的文件路径。如何确保库的路径适用于我的计算机和项目的接收者? 最佳答案 这是构建系统或构建配置工具的作用。周围有很多这样的人。主要的可能是CMake因为它具有非常广泛的功能集、跨平台和广泛采用。还有其他像Boost.Jam,autoconf,和其他人。这些工具的使用方式是它们具有自
所以在工作中,我正在开发一个在没有C++运行时库的情况下运行的C++应用程序。我们使用的是VisualStudio2005,并指定了/NODEFAULTLIB开关。解决方案的组织方式包括各种静态库项目,然后是使用这些库的单个可执行项目。这些库大多是在单独的存储库中跟踪的公共(public)库。它们可以更改,但如果我们可以避免的话,最好不要更改。其中一个常用库使用float学。由于我们没有C++运行时,我们自己定义了这些例程(例如:_ftol2_sse用于将float转换为int)。根据我对底层细节的(相当有限的)理解,编译器发出符号_fltused信号,表示需要使用float学例程。出
尝试链接共享库(gtkmm)时,我收到其签名包含std::stringconst&的函数的链接器错误。例如,如果函数声明为voidset_icon_from_file(conststd::string&);g++报告undefinedreferenceto`Gtk::Window::set_icon_from_file(std::stringconst&)'我正在使用pkg-config中的链接器标志,而其他函数(例如,将基本类型作为参数的函数)不会发生这种情况,因此我怀疑链接器配置正确。readelf我的目标文件给了我45:00000000000000000NOTYPEGLOBALD
我有一个在“extra.h”中定义的模板类“Extra”,它有一个函数“doSomething”,并且我已经定义了“doSomething”的两个特化。两个不同的函数创建类型为“Extra”的对象,每个对象具有不同的类型参数,并且每个都调用不同的特化。两个客户端函数“client1”和“client2”分别在两个文件“client1.cpp”和“client2.cpp”中定义。在第三个文件中,“main”调用“client1”,然后调用“client2”。现在,“client1.cpp”和“client2.cpp”都#include“extra.h”。我收到“doSomething”有
我使用freeglut和glew创建了一个项目,并试图静态链接它们。目前,当我构建项目时,我得到一个exe和两个dll(freeglut32.dll和glew32.dll)。我想让它只得到exe。为了安装库,我使用了NuGet。(Install-Packagefreeglut)和(Install-Packageglew)。NuGet下载glew.lib到.\packages\glew.1.9.0.1\build\native\lib\v110\x64\Release\static\glew.lib和freeglut到.\packages\freeglut.2.8.1.15\build\
我从来没有清楚地理解所有这些链接/构建/依赖业务。现在,我正在尝试将FreeType库(在C++中)构建到iPhone的*.a库文件中(因为我尝试使用的另一个库openFrameworks将依赖于FreeType)。我知道要用iPhone编译C++,我只需要将*.cpp重命名为*.mm。(我在main()中尝试了一些简单的程序并且它有效)但是我怎样才能在Xcode中构建库?(我想没有main())另一方面,如果你们能推荐一些关于此类链接/构建主题的书籍或文档,那就太好了,我发现自己最困惑。附言。我已经获得了Xcode的付费版本和一些编译到iPhone上的示例应用程序。
我正在尝试创建一个共享对象(.so),通过使用-lboost包含一个共享对象,我隐含地包含了所有boost库。这是我尝试过的:#!/bin/shBOOST_LIBS="-lboost_date_time-gcc43-mt-lboost_filesystem-gcc43-mt"#truncatedforbrevityg++$BOOST_LIBS-shared-Wl,-soname,libboost.so.1-olibboost.so.1.0ln-silibboost.so.1.0libboost.so.1ln-silibboost.so.1libboost.so将所有3个创建的文件(li
我正在努力将Python嵌入到一些C++代码中,但我在编译它时遇到了困难。对于头文件,我有#include我会初步尝试,$g++EmbeddedPython.cpp但最终会得到EmbeddedPython.cpp:1:20:error:Python.h:NosuchfileordirectoryEmbeddedPython.cpp:Infunction‘intmain(int,char**)’:EmbeddedPython.cpp:6:error:‘Py_Initialize’wasnotdeclaredinthisscope....然后我尝试了g++EmbeddedPython.cp
在通过源代码安装cURL后,我需要在Ubuntu11.04中链接cURL。.问题的更正首先我发现-l必须在-L之前,然后发现我没有在makefile中输入变量。.获取cURL配置:在我的终端上:#curl-config--libs-L/usr/local/lib-lcurl#curl-config--cflags-I/usr/local/include没关系,这个目录下有文件cURL。我的生成文件:#TestingcURL#MAKEFILE#C++Compiler(Default:g++)CXX=g++CFLAGS=-Wall-Werror#LibrarysINCLUDE=-Iusr/
考虑这段代码:#includeusingnamespacestd;classWilma{public:staticinti;Wilma(){cout此处A行显式定义了Wilma类的staticinta。(注释掉导致链接器错误)没有它,链接器会给出undefinedreference错误。(因为实际上正在使用Wilma::i,如果我不使用它,则不会出现链接器错误。)对于Fred类的静态Wilmawilma_应该也是如此,即它也应该被显式定义......因为它也在B行的代码中使用。但事实并非如此,如果Fred::wilma_未明确定义,则不会出现链接器错误。为什么?在gcc4.5.2上测试