我正在查看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而我的日志只是没有显示?
鉴于这段代码:
#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) 我正在尝试编译一个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"无法编译简单的测试程序.
如何解决此错误并编译项目?
我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退出状态
我编译了一个使用g ++而不是gcc的库.首先我认为源代码是用C++编写的,但我后来发现*.cc文件中没有任何C++代码.
为了证实这一点,我用gcc替换了原始makefile中的g ++.我仍然得到了正确的程序.
有谁能解释一下?这不是我第一次遇到这种情况.
Eclipse June CDT报道g++ not found in path,如何解决这个问题?
嗨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++代码:
#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/).
问题是:
gcc正确选择正确的编译器,但然后使用错误的链接器.这样对吗?正如我所见(纠正我,如果它是错的)gcc是一个主要程序,它接受输入并决定如何处理它.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) 以下简单程序无法使用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++ ×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