Articles of g ++

运行g ++链接到特殊的库

这些想法可能看起来很奇怪 我在Gnu / Linux系统上创build了其他的环境,通过创build目录并将必要的文件复制到bin,lib,usr等等。 然后我做“chroot”,然后在里面做一些操作。 问题是环境中的所有文件都是从较旧的操作系统(2.4内核版本)中获取的。 但编译器必须采取现代(在现代语言标准的支持下)。 当我试图在环境中运行编译器时,出现错误: g++: /lib/libc.so.6: version `GLIBC_2.11' not found (required by g++) g++: /lib/libc.so.6: version `GLIBC_2.4' not found (required by g++) 然后,我将实际的libc.so.6复制到/ home / mylibs(内部环境)。 导出LD_LIBRARY_PATH: bash-3.00# export LD_LIBRARY_PATH="/home/mylibs/" 但似乎没有任何改变。 同样的错误依然存在。 下一个尝试是build立静态链接的gcc编译器。 不幸的是发生了一些问题( 静态链接的gcc )。 也许我从根本上是错误的…但是,我有没有其他的方式来build立可执行文件链接到旧的库,使用现代编译器? PS我的操作系统是ArchLinux。 'uname -r'显示'4.8.12-3-ARCH'。 最老的环境是由MCBC 3.0(俄文字母,不知道如何正确解密,也许武装部队的移动系统)与2.4内核版本。

为什么我得到这个错误? void *不是指向对象types的指针。

void *stackAddr[NUM_THREADS]; stackAddr[i] = malloc(STACKSIZE); 编译器(g ++ 4.4.3)抱怨malloc被调用的地方… warning: pointer of type 'void *' used in arithmetic error: 'void*' is not a pointer-to-object type 如果你有兴趣看到整个代码,在这里它… #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #define NUM_THREADS 4 void *stackAddr[NUM_THREADS]; pthread_t thread[NUM_THREADS]; pthread_attr_t attr; void *BusyWork(void *t) { int i; long tid; double result=0.0; tid = (long)t; […]

-finstrument-functions不适用于dynamic加载的g ++共享对象(.so)

我正在用Ubuntu上的g ++共享对象(.so)文件testing-finstrument函数。 我发现了一个奇怪的行为,即只有库是静态链接的,函数似乎才起作用。 如果我用dlopen / dlsym等链接到库,代码的function仍然有效,但它不会调用__cyg_profile *函数。 这里有一些代码来快速重现问题: MyLib.h #ifndef __MYLIB_H__ #define __MYLIB_H__ class MyLib { public: void sayHello(); }; #endif MyLib.cpp #include "MyLib.h" #include <iostream> using namespace std; void MyLib::sayHello() { cout<<"Hello"<<endl; } MyLibStub.cpp(到.so的C接口) #include "MyLib.h" extern "C" void LoadMyLib () { MyLib().sayHello(); } Trace.cpp #include <stdio.h> #ifdef __cplusplus extern "C" { void __cyg_profile_func_enter(void […]

GCC是否支持命令文件

MSVC编译器支持用于传递命令行选项的命令文件 。 这主要是由于可以传递给CreateProcess调用的命令行参数的大小的限制。 这在Linux系统上不是什么问题,但是在执行Unix应用程序(如gcc)的cygwin端口时,应用相同的限制。 因此,有没有人知道如果gcc / g ++也支持某种types的命令文件? 谢谢。

G ++总是失败,对_Unwind_GetIPInfo未定义的引用

我刚刚升级到我的华硕EeePC上网本的Ubuntu 11.04,并与G ++有问题。 使用G ++编译任何程序,无论是使用iostream,cstdio还是stdio.h,即使是一个简单的“Hello World”,也会失败,并显示以下消息: /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/libstdc++.so: undefined reference to `_Unwind_GetIPInfo@GCC_4.2.0' collect2: ld returned 1 exit status 我使用新立得包pipe理器。 在升级之前,Ubuntu提供了GCC 4.4,不过我也通过另一个仓库安装了GCC 4.5(gcc-4.5)。 GCC 4.5现在是Ubuntu 11.04的默认设置。 我认为这个问题可能与libgcc有关。 我尝试重新安装GCC,但是我无法删除libgcc:首先,新立得软件包pipe理器报告说在某处存在破损的软件包,并停止了我的尝试; 但我也注意到,删除libgcc将需要删除几乎所有的应用程序,包括apt和Firefox。 我也尝试了gcc-snapshot包; 不幸的是,它给出了上面列出的相同的错误。 有什么办法可以使用新立得软件包pipe理器来获取G ++的最新工作版本?

启动G-WAN的问题

我尝试在Ubuntu 12.04.1 LTS(x64)上安装G-Wan。 我遵循快速指示: http : //gwan.com/download 当我执行$ sudo ./gwan时,显示我: 浮点exception(核心转储) 然后我按照慢速指示: http : //www.as2.com/pdf/GWAN-Install-Manual-for-Ubuntu-12.04.pdf 但我有同样的错误。 我告诉你日志的错误: apport.log ERROR: apport (pid 13912) Mon Apr 29 13:42:56 2013: called for pid 13870, signal 8 ERROR: apport (pid 13912) Mon Apr 29 13:42:56 2013: executable: /opt/gwan_linux64-bit/gwan (command line "./gwan") ERROR: apport (pid 13912) Mon Apr 29 13:42:56 […]

在静态库中可用的二进制variables消失

我有提到的问题。 我在一个静态库中创build了一个对象,当我在静态库上运行nm时,它就在那里,但是当我把这个库链接到一个二进制文件并运行nm它就消失了。 我知道这个问题之前已经被问过了,但我找不到任何答案。 对于我来说,能够在二进制文件中保留该variables是非常重要的,因为我们正在试图对二进制文件中的静态库进行版本检查。 请帮忙。 谢谢。 示例代码如下: test.h #ifndef TEST_H #define TEST_H class Test { public: Test(); }; extern Test* gpTest; #endif TEST.CPP #include "test.h" Test::Test() { gpTest = this; } Test test; main.cpp中 #include "test.h" #include <iostream> using namespace std; Test* gpTest = NULL; int main() { return 0; } build立 g++ -c test.cpp […]

核心转储创build共享库

当我尝试在我的ubuntu 14.04 64位系统中创build一个共享库时,发生了这个错误: g++ -Wall -g -Iinclude -c /home/pure/Schreibtisch/TestDLL/src/test.cpp -o obj/Debug/src/test.o g++ -shared obj/Debug/src/test.o -o bin/Debug/TestDLL.so collect2: error: ld terminated with signal 6 [Abgebrochen], core dumped /usr/bin/ld: ld: wcsrtombs.c:99: __wcsrtombs: Zusicherung »data.__outbuf[-1] == '\0'« nicht erfüllt. 我也试图从一个简单的类,用一个空的构造函数和一个空的析构函数做一个简单的共享库,同样的错误来了。 任何人都可以帮我解决这个问题吗? 如果需要更多的信息,我可以告诉他们。 纯@纯QOSMIO-X500:〜$其中g ++ 的/ usr /斌/克++ pure @ pure-QOSMIO-X500:〜$ g ++ –version g ++(Ubuntu 4.8.2-19ubuntu1)4.8.2版权所有(C)2013自由软件基金会,这是自由软件; 请参阅复制条件的来源。 没有保修; […]

如何编译独立的OpenCV可执行文件?

我编译我的OpenCV程序如下: g++ `pkg-config –cflags opencv –libs opencv` <filename>.cpp 它在我的电脑上完美运行。 我可以单独使用程序来编译共享库,以便可以在没有opencv的其他计算机上运行共享库吗? 如果是这样,我该怎么做?

有什么方法可以replace库中的函数吗?

我和一个图书馆一起工作,它定义了一个脚本语言的内部分工操作员。 不幸的是,它不会检查除数。 这导致很多头痛。 我知道运营商的签名。 double ScriptClass::Divide(double&, double&); 可悲的是,它甚至不是一个C函数。 有没有什么办法可以让我的应用程序使用我自己的Divide函数而不是ScriptClass::Divide函数? 编辑:我知道dlopen(NULL,..)并用用户定义的replace“C”function。 这可以做类成员函数(不诉诸使用mangled名称)?