相关疑难解决方法(0)

g ++既是c ++编译器又是链接器?

我正在查看Eclipse中构建的输出.我正在为ColdFire处理器进行交叉编译.编译行看起来像这样:

m68k-elf-g++ -O2 -falign-functions=4 -IC:\nburn\include -IC:\nburn\MOD52...
Run Code Online (Sandbox Code Playgroud)

接着是更多的包含文件,明显的"编译器"标志,最后是我改变的一个源文件.下一行再次调用相同的工具:

m68k-elf-g++ src\main.o src\TouchPanelMediator.o src\Startup.o....
Run Code Online (Sandbox Code Playgroud)

接着是更多的.o文件,一些.ld文件和一些.a文件.这似乎是将所有各种类型的目标文件链接在一起.

在Gnu家族中,g ++是一些超级应用程序,可以根据参数确定是否需要编译或链接?它是否具有内置的功能,或者它只是调度编译到gcc并链接到ld而我的日志只是没有显示?

c++ gcc gnu g++ ld

18
推荐指数
2
解决办法
1万
查看次数

std :: call_once()在第一次调用后可调用的第二次调用时挂起

鉴于这段代码:

#include <mutex>
#include <iostream>

void f(bool doThrow) {
    if (doThrow) {
        std::cout << "Throwing" << std::endl;
        throw 42;
    }
    std::cout << "Not throwing" << std::endl;
}

std::once_flag flag;

void g(bool doThrow) {
    try {
        std::call_once(flag, f, doThrow);
        std::cout << "Returning" << std::endl;
    } catch (int i) {
        std::cout << "Caught " << i << std::endl;
    }
}

int main() {
    std::once_flag flag;
    g(true);
    g(true);
    g(false);
    g(true);
    g(false);
}
Run Code Online (Sandbox Code Playgroud)

编译时g++ -std=c++11 -pthread -ggdb我得到输出:

Throwing
Caught 42
Run Code Online (Sandbox Code Playgroud)

进程挂起之后:

#0 …
Run Code Online (Sandbox Code Playgroud)

c++ g++ libstdc++ compiler-bug c++11

11
推荐指数
1
解决办法
553
查看次数

使用CMake编译时"CMAKE_CXX_COMPILER已损坏"

我正在尝试编译一个Git项目,我在使用CMake时遇到了一些问题.最初,它没有找到C++编译器并提示错误:

cmake ..
Run Code Online (Sandbox Code Playgroud)

找不到CMAKE_CXX_COMPILER.

通过将环境变量"CXX"或CMake缓存条目CMAKE_CXX_COMPILER设置为编译器的完整路径,或者如果它位于PATH中的编译器名称,告诉CMake在哪里找到编译器.

所以我做了:

CXX="gcc" cmake ..
Run Code Online (Sandbox Code Playgroud)

但是提示了另一个错误:

- CXX编译器标识未知
- 检查工作CXX编译器:/ usr/bin/gcc
- 检查工作CXX编译器:/ usr/bin/gcc -
/usr/share/cmake-3.0中的CMake错误/Modules/CMakeTestCXXCompiler.cmake:54(消息):
C++编译器"/ usr/bin/gcc"无法编译简单的测试程序.

如何解决此错误并编译项目?

gcc cmake

10
推荐指数
2
解决办法
3万
查看次数

在GCC中将C++链接到C

extern "C" int ping(void)在C++"静态库"项目中有一个函数.现在,我想写一个简单的Hello-World C程序来调用这个函数int x = ping();.

我使用,g++ / gcc但我无法将C可执行文件与C++共享库链接.拜托,怎么能这样做?你能提供准确的gcc命令吗?

编辑:

g++ -c -static liba.cpp
ar rcs liba.a liba.o
gcc -o x main.o -L. -la
Run Code Online (Sandbox Code Playgroud)

得到:

./liba.a(liba.o):(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
Run Code Online (Sandbox Code Playgroud)

collect2:ld返回1退出状态

c c++ linker gcc g++

7
推荐指数
1
解决办法
1万
查看次数

为什么用g ++而不是gcc编译*.cc文件?

我编译了一个使用g ++而不是gcc的库.首先我认为源代码是用C++编写的,但我后来发现*.cc文件中没有任何C++代码.

为了证实这一点,我用gcc替换了原始makefile中的g ++.我仍然得到了正确的程序.

有谁能解释一下?这不是我第一次遇到这种情况.

linux gcc compilation g++

6
推荐指数
1
解决办法
2万
查看次数

6
推荐指数
2
解决办法
6万
查看次数

C++未解析的外部符号

嗨iam begginer在c ++我有静态方法的类,我无法访问它,它会引发我一个错误

    1>------ Build started: Project: CPractice, Configuration: Debug Win32 ------
1>  Source.cpp
1>Source.obj : error LNK2001: unresolved external symbol "private: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > CPractice::name" (?name@CPractice@@0V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A)
1>c:\users\innersoft\documents\visual studio 2012\Projects\CPractice\Debug\CPractice.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

这是我的代码

#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <string>

using namespace std;

class CPractice
{
    public:
        static void setName(string s)
        {
            name = s;
        }
        static string getName()
        { …
Run Code Online (Sandbox Code Playgroud)

c++ variables static class

6
推荐指数
1
解决办法
2万
查看次数

gcc编译C++代码:未定义引用`operator new [](unsigned long long)'

有一个C++代码:

#include <stdio.h>

int main() {

int b = sizeof('a');
if(b==4) printf("I'm a C program!\n");
else printf("I'm a C++ program!\n");
}
Run Code Online (Sandbox Code Playgroud)

像这样编译它:

gcc main.cpp -o main
Run Code Online (Sandbox Code Playgroud)

它成功并给出:

I'm a C++ program!
Run Code Online (Sandbox Code Playgroud)

然后在函数内部的某处添加一行 main

int *p1 = new int [1000];
Run Code Online (Sandbox Code Playgroud)

它失败了:

C:\Users\...\AppData\Local\Temp\cccJZ8kN.o:main1.cpp:(.text+0x1f): undefined reference to operator new[](unsigned long long)'
collect2.exe: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

然后以下两个命令成功编译代码:

gcc main.cpp -o main -lstdc++
Run Code Online (Sandbox Code Playgroud)

g++ main.cpp -o main
Run Code Online (Sandbox Code Playgroud)

编译器是minGW-win64(http://mingw-w64.sourceforge.net/).

问题是:

  1. 最后两个命令中哪一个更好?
  2. 在我看来,gcc正确选择正确的编译器,但然后使用错误的链接器.这样对吗?
  3. 可能是minGW-win64中的一个问题?

正如我所见(纠正我,如果它是错的)gcc是一个主要程序,它接受输入并决定如何处理它.gcc如果没有它,我会更好地使用它 …

c++ gcc g++

6
推荐指数
1
解决办法
2万
查看次数

GCC:对 vtable 的未定义引用

这个问题不同于例如

g++ 和 gcc 有什么区别?

因为如果知道所描述问题的原因是“g++ 和 gcc 之间的差异”,则无需再寻找答案。换句话说,虽然答案相同,但问题不同。

我有以下程序test.cpp:

struct CircuitElement {
    bool value;
    const char *name;
    CircuitElement *next;

    CircuitElement (const char *name);    
    virtual void evaluate () = 0;       
};

struct Button: CircuitElement {
    Button (const char *name);
    virtual void evaluate ();
};

CircuitElement::CircuitElement (const char *name): name (name), next (0) {
}

Button::Button (const char *name): CircuitElement (name) {
}

void Button::evaluate () {
    // Some statements
}

Button button ("button");

int main () {
    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ gcc

6
推荐指数
0
解决办法
7805
查看次数

Cygwin:g ++ 5.2:'to_string'不是'std'的成员

以下简单程序无法使用gcc在cygwin中编译

#include <string>
#include <iostream>

int main()
{
  std::cout << std::to_string(4) << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

命令行:

$ g++ -std=c++0x to_string.cc
Run Code Online (Sandbox Code Playgroud)

错误:

to_string.cc: In function ‘int main()’:
to_string.cc:6:16: error: ‘to_string’ is not a member of ‘std’
   std::cout << std::to_string(4) << std::endl;
Run Code Online (Sandbox Code Playgroud)

G ++版本:

$ g++ --version
g++ (GCC) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. …
Run Code Online (Sandbox Code Playgroud)

c++ gcc cygwin c++11

5
推荐指数
1
解决办法
5632
查看次数

标签 统计

c++ ×7

gcc ×7

g++ ×6

c++11 ×2

c ×1

class ×1

cmake ×1

compilation ×1

compiler-bug ×1

cygwin ×1

eclipse-cdt ×1

gnu ×1

ld ×1

libstdc++ ×1

linker ×1

linux ×1

static ×1

ubuntu-12.04 ×1

variables ×1