草庐IT

c++ - 链接到具有不同实现(代码)的同名 DLL 或共享库对象 (so) 的两个插件

我有两个“插件”(为了便于讨论,将它们视为软件包中的两个不同应用程序)动态链接到我的库的两个单独构建的版本。我的代码是用C++编写的,并且始终使用一致的命名空间。有时我必须构建两个不同的每个应用程序的版本。当两个应用程序(插件)时,这似乎会导致一些问题在包中同时加载。首先,我需要帮助理解为什么会出现此错误。例如,我有两个独立但名称相同的库,比如说mylib.so(或DLL),每个应用程序都链接到(唯一的)其中一个。如果mylib.so中的底层代码是相同的(即命名空间、函数名称等,当然实现略有不同)这是否会导致问题?库的两个拷贝位于唯一的位置这一事实是否足以避免由于歧义或其他链接错误而可

linux - 如何将项目(比如zeromq)构建为静态库并将其链接到我的项目中

我想在我的项目中使用zeroMQ然后我运行如下配置以将libaray构建到我的主文件夹中./configure--enable-static--disable-shared--prefix=/home/xx/out然后我链接我的项目gcc-omyprojectx.cy.c/home/xx/out/libzmq.a但仍然有很多链接错误,如下所示:../zmq/lib/libzmq.a(libzmq_la-ip.o):Infunctionzmq::resolve_ip_interface(sockaddr_storage*,unsignedint*,charconst*)':/home/s

在 Linux 上动态链接到 libc 时调用 `atexit`

如果我有以下用C编写的程序(在Debian8.7上用GCC编译),我可以像您期望的那样调用atexit():#includevoidexit_handler(void){return;}intmain(){atexit(exit_handler);return0;}当我编译并运行它时:$gcctest.c$./a.out正如您所期望的那样,不输出任何内容。事实上,当我运行ldd时,我得到:$ldda.outlinux-vdso.so.1(0x00007fffbe592000)libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6(0x00007fe07d3

c++ - 通过 g++ 编译将 .so 文件链接到 .cpp 文件

我正在尝试让一个库在我的c++项目中工作,但对于不习惯c++的人,没有关于如何做到这一点的明确说明以下link是离我最近的地方内容如下-L/path/to/my/library/folder-ldllname还有以下thread陈述如下gccyourfile.cpp-lblah现在我可以看到命令是-l+filename,例如我的文件名是directory/libtest.so它会是-ldirectory/libtest.so,这是正确的吗,有人可以澄清我目前正在使用以下命令编译我的maincpp.cpp文件,但我想包含一个名为./directory/libtest.so的.so文件g+

linux - 为什么简单地链接到 GL 会导致段错误?

我正在Linux上编写一个OpenGL应用程序,我可以使用GLUT轻松创建一个窗口,但是一旦我链接到-lGL,我就会遇到段错误.有什么想法会导致这种情况吗?即使使用-Wall,我也没有收到任何编译器警告或错误。只有当我运行该程序时,才会给我一个段错误。我以前从未使用过gdb,但是这些信息有帮助吗?(gdb)runStartingprogram:/home/drjrm3/code/dc/c++/dc.exeProgramreceivedsignalSIGSEGV,Segmentationfault.0x0000000000000000in??()(gdb)backtrace#00x000

c - 如何知道链接到二进制可执行文件的调试符号文件的名称和/或路径?

如何知道链接到二进制可执行文件的调试符号文件的名称和/或路径?假设你是这样的:objcopy--only-keep-debugfoofoo.dbgobjcopy--strip-debugfooobjcopy--add-gnu-debuglink=foo.dbgfoo现在foo.dbg有调试符号,foo只有gdb可以使用的foo.dbg的链接。既然gdb可以从foo知道符号文件,我们怎么能在不实际运行gdb的情况下知道呢?我观察到,即使我将可执行文件从foo重命名为xyz,gdb仍然会从foo.dbg加载符号,因此它不像binaryname.extension,扩展是可选的。

链接到两个第 3 方共享库时,C++ 程序崩溃

我有两个用于linux平台的外包共享库(没有源代码,没有文档)。这些库在单独链接到程序(g++xx.cpplib1.so或g++xx.cpplib2.so)时工作正常。但是,当任何c++程序同时链接到这两个共享库时,程序不可避免地会崩溃并出现“doublefree”错误(g++xx.cpplib1.solib2.so)。即使c++程序是一个空helloworld程序,与这些库无关,它仍然会崩溃。#includeusingnamespacestd;intmain(){cout生成文件:g++helloword.cpplib1.solib2.so我得到了一些线索,这些lib1.so和lib

c++ - 将 g++ 4.8 链接到 libstdc++

我在桌面上下载并构建了gcc4.8.1,运行64位Ubuntu12.04。我从源代码构建它,就像文档推荐的那样,并使用命令../../gcc-4.8.1/configure--prefix=$HOME--program-suffix=-4.8makemake-kcheckmakeinstall它似乎通过了所有测试,我将所有东西安装到我的主目录中,后缀为-4.8以区别于系统gcc,即版本4.6.3。不幸的是,当我使用g++-4.8编译c++程序时,它链接到系统libc和libstdc++,而不是从gcc-4.8.1编译的较新的。我下载并构建了gcc4.8,因为我想尝试一下标准库中的新C+

c++ - 如何在unix环境下将Poco库(libraries)链接到我们的程序

我在使用Poco库时遇到问题。我需要一个简单的解决方案来简化编译。Poco库是否有任何pkg-config文件可用于我们的make文件?或者任何替代解决方案?目前我使用UbuntuGNU/Linux。我正在尝试在我的应用程序中使用poco库,但我不知道如何将Poco库链接到它。事实上,我不知道应该将多少库链接到该应用程序。我想知道是否有一种简单的方法可以做到这一点,例如使用pkg-config文件,就像我们使用gtkmm一样,例如:g++prog.cc`pkg-config--gtkmm-2.4--libs--cflags`-oprogpkg-config程序将适当的库和头文件附加到我

linux - 如何告诉 mex 链接到/usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的那个?

现在MATLAB2012a中的mex仅正式支持gcc4.4.6,但我想使用gcc4.7,风险自负。现在如果我直接用mex编译一些东西,它会提示/usr/lib/gcc/i686-linux-gnu/4.7/cc1plus:/usr/local/MATLAB/R2012a/sys/os/glnx86/libstdc++.so.6:version`GLIBCXX_3.4.15'notfound(requiredby/usr/lib/i386-linux-gnu/libppl_c.so.4)/usr/lib/gcc/i686-linux-gnu/4.7/cc1plus:/usr/local/