草庐IT

c++ - 如何为 xcode 安装 Openmpi?

我正在尝试在xcode4中运行一些MPI程序。我通过键入sudoportinstallopenmpi从MacPort安装了openmpi,安装正常完成。然后我将opt/local/include/openmpi添加到我的用户标题搜索路径,将“libmpi.dylib”和“libmpi_cxx.dylib”拖到我的项目中。但是当我尝试运行该程序时,我收到以下错误消息:Undefinedsymbolsforarchitecturex86_64:"_MPI_Comm_accept",referencedfrom:MPI::Intracomm::Accept(charconst*,MPI::I

c++ - gcc 在编译时或链接时的可见性

我正在尝试使用gcc的fvisibility功能限制共享库的ABI。但是我很困惑什么是正确的方法。我的makefile将构建过程分为两个阶段。在第一步中,所有.cpp文件都使用一些gcc选项构建为目标文件。然后使用另一组gcc和ld选项将所有目标文件链接在一起。从我读到的内容来看,可见性与第二步有关。然而,这与我观察到的结果相矛盾。如果我将fvisibility=hidden添加到编译时选项,结果如预期的那样,nm-D报告了一组更小的导出符号。相反,如果我将它添加到链接时间选项中,它似乎不会影响构建。在寻找解释时,我比较了使用和不使用fvisibility生成的目标文件。区别似乎在于目

c++ - 如果动态和静态版本都存在,如何告诉 qmake 使用静态库?

我在/usr/local/lib中安装了Boost的静态和动态版本,即libboost_system.dylib和libboost_system.a存在。在我的qmake项目文件中,我将Boost库添加到链接器中,如下所示:LIBS+=-lboost_system我可以告诉qmake更喜欢静态版本而不明确说明文件名,这样我就可以减少qmake代码量以在所有平台上获得静态链接吗? 最佳答案 我没有使用过qmake,但是有一种方法可以通过将-static标记添加到链接器来使gcc链接到静态库。所有你想静态链接的库都应该放在这个标志之后。

c++ - 用cmake将第三方静态库组合成独立的静态库?

这个问题在这里已经有了答案:CombiningseveralstaticlibrariesintooneusingCMake(7个答案)Mergemultiple.sosharedlibraries(2个答案)关闭3年前。比方说,我有libA.alibB.alibC.alibD.so和一些链接到libPack.a的代码。稍后,我将创建libFinal.so,它将链接到libPack.a并且libFinal.so最终用于可执行文件。当链接器创建静态库时,我相信每个动态库都会在编译时解析并包含在静态库中。它是否也适用于(-fPIC)第三方静态库?如何使用CMake将一堆静态库和共享库组合成

将可执行文件链接到第三方依赖共享库时,C++ CMake undefined reference

我阅读了很多相关主题(如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

c++ - 为什么 ld 链接器允许使用相同的方法定义多个类?

考虑这个文件,first.cpp,包含一个类定义和使用:#includestructFoo{Foo(){std::cout和另一个second.cpp,包含一个冲突的类定义:#includestructFoo{Foo();~Foo();};Foo::~Foo(){std::cout当定义了两个具有相同名称的函数时,链接器会提示重复符号,但这些具有重复类方法的文件编译时没有错误。我用这些命令编译:$g++-csecond.cpp-osecond$g++secondfirst.cpp-ofirst对第二个g++调用的参数重新排序不会更改输出。当first运行时,这是输出:$./firstF

c++ - 一个应用程序中同一库的两个版本

我有同一个共享库的两个版本(具有几乎相同的API)。我必须在同一个应用程序中使用它们。我知道如何解决header中的名称冲突——我将像这样导入它们namespaceversion1{#include"version1/library.h"}namespaceversion2{#include"version2/library.h"}我不知道如何解决链接冲突——库是动态链接的。第一个版本在自定义lib文件夹中创建以下结构:libsomething.so->libsomething.so.2libsomething.so.2->libsomething.so.0.8.31.1libsome

c++ - 发生 PIE 链接错误时不能使用针对 `.bss' 的重定位 R_X86_64_32S

我正在尝试编译AccNEAT具有CUDA支持的项目。当我在没有CUDA支持的情况下编译它时,它工作正常。但是,当我使用CUDA支持进行编译时,出现链接器错误。要编译项目,我的环境是Ubuntu18.04LTS64位,带有GCC-4.8和NVCC6.0。链接器错误:/usr/bin/x86_64-linux-gnu-ld:obj/cu/network/cuda/cudanetwork.o:relocationR_X86_64_32Sagainst`.bss'cannotbeusedwhenmakingaPIEobject;recompilewith-fPIC/usr/bin/x86_64

c++ - ILINK32 错误 : Unresolved external '__fastcall System::TObject::NewInstance(System::TMetaClass *)' referenced from XXX. obj 的原因?

我从C++Builder2009的链接器中收到以下错误Unresolvedexternal'__fastcallSystem::TObject::NewInstance(System::TMetaClass*)'referencedfromXXX.obj?我们有一组Delphi文件(.pas)和一组C++Builder文件(.hpp和.obj),其中是从这些.pas文件生成的。一组文件被复制到另一台机器上。两台机器都安装了完全相同的C++Builder2009版本和相同的更新(最新:3+4)。当我在另一台机器上的C++Builder中创建一个空的VCL应用程序并将此集合中的一个obj文

c++ - 如何将 (C++) 与重命名的 Python .lib 和 .dll 链接起来?

当我在C++项目中包含来自Python2.5的“Python.h”时,它通过一些神奇的过程知道它必须与“python25.lib”链接并在运行时加载“python25.dll”,尽管我没有在“链接器->附加依赖项”和“链接器->附加库目录”中均未指定任何内容。现在我想将python25.lib/.dll重命名为gpython25.lib/.dll之类的名称并与它们链接。这是为了确保与THISpythondll链接,而不是来自另一个已安装应用程序的另一个python25.dll,独立于PATH搜索顺序。有办法吗?谢谢-大卫 最佳答案