这个问题在这里已经有了答案:CombiningseveralstaticlibrariesintooneusingCMake(7个答案)Mergemultiple.sosharedlibraries(2个答案)关闭3年前。比方说,我有libA.alibB.alibC.alibD.so和一些链接到libPack.a的代码。稍后,我将创建libFinal.so,它将链接到libPack.a并且libFinal.so最终用于可执行文件。当链接器创建静态库时,我相信每个动态库都会在编译时解析并包含在静态库中。它是否也适用于(-fPIC)第三方静态库?如何使用CMake将一堆静态库和共享库组合成
如何为我的C程序变量带来以下值:用于执行程序的CPU,即在同一程序上花费了多少处理器。程序的执行时间,即完成需要多长时间。编译器警告,即如何在我自己的程序中将编译器警告放在字符串变量上?我的程序占磁盘的大小:程序占用我的硬盘。我发现这很难做到,而且我不知道有什么方法可以做到。提前致谢 最佳答案 可执行文件的编译器警告是仅在您的程序构建后可用的信息。所以我认为将这些信息静态打包到您的“C程序变量”中并不容易。您可以将此数据保存到一个文件中,作为额外的构建步骤。例如,编写一个程序来执行编译器并读取其输出。然后,该程序会将数据保存到文件中
我正在使用点云库和cmake进行编译,我已经在Debug模式下构建它,但我的程序没有以我期望的方式出现错误或中止。具体来说,我收到这样的消息:(gdb)runbunnyStartingprogram:debug/our_cvfhbunnylibc++abi.dylib:terminating[NewThread0x170bofprocess80178]ProgramreceivedsignalSIGABRT,Aborted.0x00007fff88c6f866in??()(gdb)bt#00x00007fff88c6f866in??()#10x00007fff8bb5235cin??(
几年前我开发了几个C++库,它们被三个C++项目使用。我将库编译为共享库,以便在库更改时不必重新编译/重新链接程序。我正在将他们的编译过程移植到CMake3.0,但在编译其中一个时遇到了问题。这个库不能提供一些功能;一些函数必须在主程序中定义,即使它们是在库中使用的。原因是这些函数的实现依赖于程序内部结构。因此,这些库已使用header进行编译,header将所有这些函数声明为extern。这是一个来自有问题的库的header的示例:externchar*Get_Name(void*b);我正在使用extern关键字声明函数。阅读更多相关内容后,似乎extern可能是多余的。在x86_
我有一个正在处理的R包,它包含在src文件夹下用C和C++编写的代码。目前,该包在Rstudio上编译和工作,因为它遵循默认目录结构。随着项目的构建,我希望能够在src下的子文件夹中组织我的代码。按照“编写R扩展”-在子目录下编译的指示,我创建了一个名为“test”(/src/test)的文件夹,其中现在包含我的所有文件(*.c、*.cpp、*.h)和像这样修改我的Makevars-SOURCES_C=$(wildcardtest/*.c)SOURCES_CPP=$(wildcardtest/*.cpp)PKG_CPPFLAGS=-I${R_HOME}/include-I.PKG_LI
我已经将boost库从以前的1.54(svn源)更新到1.57(git源)。尽管我使用了相同的./b2参数,但目标目录不包含ptr_container库。具有克隆存储库的目录在此路径上正确包含ptr_container库:boost_git/libs/ptr_container我正在使用以下命令构建它:./b2--install--prefix=$SHL_PATH/boost-sNO_BZIP2=1-sNO_ZLIBruntime-link=sharedlink=shared-j2install但没有成功。编辑:似乎只有从git构建时才会出现问题。当我从boost站点下载zip包时,目
我阅读了很多相关主题(如1、2、3)但我自己没有找到答案,所以我来了。我有一个构建和可执行的CMake项目,比方说“x”。我创建了一个名为“a.so”的共享库,它依赖于另一个名为“b.so”的共享库。我想在“x”中使用“a”。这是我简化的“x”CMakelists.txt:SET(ROOT_DIR${CMAKE_CURRENT_SOURCE_DIR})LINK_DIRECTORIES(${ROOT_DIR}/lib/a/bin/)#containsliba.soINCLUDE_DIRECTORIES(${ROOT_DIR}/lib/a/include/)#contains"a"head
我有一个包含GLiblibrary的C++共享库对象。当我创建一个带有空main()函数的最小测试程序,并链接到共享库时,该程序在运行时立即中止,并显示以下GLib错误信息:GLib(gthread-posix.c):UnexpectederrorfromClibraryduring'pthread_cond_init':Invalidargument.Aborting.因为我的主函数是空的,错误一定是在某个地方的某个预主初始化函数中发生的。因此,使用GDB我发现GLib有一个静态初始化构造函数(在glib-init.c中),它在运行时调用main()之前。在该初始化函数中,它调用了p
我的waf项目有两个依赖项,使用CMake构建。我正在尝试做的是遵循dynamic_build3在wafgitrepo中找到的示例,创建一个生成CMake的工具,并在成功构建后,在waf的输出子目录中执行安装:@extension('.txt')defspawn_cmake(self,node):ifnode.name=='CMakeLists.txt':self.cmake_task=self.create_task('CMake',node)self.cmake_task.name=self.target@feature('cmake')@after_method('process
默认情况下,libtool创建两个版本的库-静态版本和动态版本,这正是我所需要的。我还需要我的库,无论它是什么类型——静态或动态,都将针对某些依赖项进行静态链接(几个.a文件——lib1.a、lib2.a和lib3.a)。我在_LDFLAGS中尝试了--whole-archive选项,如下所示:mylib_la_LDFLAGS=...-Wl,--whole-archive,-llib1-llib2-llib3--no-whole-archive....但是在Makefile生成之后,这些标志被移动到命令的末尾,因此没有任何效果:...-llib1-llib2-lib3....-Wl,-