相关疑难解决方法(0)

为什么必须在C中链接数学库?

如果我包含<stdlib.h><stdio.h>在C程序中,我不必在编译时链接这些,但我必须链接到<math.h>,使用-lmgcc,例如:

gcc test.c -o test -lm
Run Code Online (Sandbox Code Playgroud)

这是什么原因?为什么我必须显式链接数学库而不是其他库?

c compilation math.h

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

对'std :: cout'的未定义引用

这是一个例子:

#include <iostream>
using namespace std;
int main()
{
    cout << "Hola, moondo.\n";
}
Run Code Online (Sandbox Code Playgroud)

它抛出错误:

gcc -c main.cpp gcc -o edit main.o  main.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `std::cout'
main.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char,std::char_traits<char> >& std::operator<< <std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
main.o: In function `__static_initialization_and_destruction_0(int,int)':
main.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()'
main.cpp:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld
returned 1 exit status make: *** [qs] Error 1
Run Code Online (Sandbox Code Playgroud)

此外,这个例子:

#include <iostream>
int main()
{
    std::cout<<"Hola, moondo.\n";
}
Run Code Online (Sandbox Code Playgroud)

抛出错误:

gcc …
Run Code Online (Sandbox Code Playgroud)

c++ gcc cout c++11

161
推荐指数
4
解决办法
16万
查看次数

CC,gcc和g ++之间的区别?

在汇编代码生成,可用库,语言功能等方面编译C和C++代码时,3个编译器CC,gcc,g ++有什么区别?

c c++ gcc compilation

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

用gcc编译C++程序

问题:如何使用gcc编译器编译C++程序?

info.c:

#include<iostream>
using std::cout;
using std::endl;
int main()
{
   #ifdef __cplusplus
   cout << "C++ compiler in use and version is " << __cplusplus << endl;
   #endif
   cout <<"Version is " << __STDC_VERSION__ << endl;
   cout << "Hi" << __FILE__ << __LINE__ << endl;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译 info.c

$ gcc info.C

Undefined                       first referenced
 symbol                             in file
cout                                /var/tmp/ccPxLN2a.o
endl(ostream &)                     /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int)            /var/tmp/ccPxLN2a.o
ostream::operator<<(long)           /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *)   /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written …
Run Code Online (Sandbox Code Playgroud)

c++ gcc gnu g++

68
推荐指数
5
解决办法
17万
查看次数

"g ++"和"c ++"编译器

我刚刚在我的Ubuntu上找到了两个不同的C++编译器:/ usr/bin/g ++和/ usr/bin/c ++.我不熟悉后者,但是man c ++只是跳到了gcc的联机帮助页面.我想知道它们作为C++编译器的区别是什么?

感谢致敬!

c++ compiler-construction ubuntu g++

50
推荐指数
4
解决办法
3万
查看次数

MAC OS X 10.8上的gcc 4.8抛出"架构x86_64的未定义符号:"

所有,我在我的mac os x 10.8中编写了这样的代码,当我使用"gcc use_new.cpp -o use_new"来编译它时,它会抛出错误的消息,如下所示:

Undefined symbols for architecture x86_64:
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(void const*)", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(double)", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(int)", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(unsigned long)", referenced from:
      _main in ccr2vrRQ.o
  "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int) in ccr2vrRQ.o
  "std::ios_base::Init::~Init()", referenced from:
      __static_initialization_and_destruction_0(int, int) in ccr2vrRQ.o
  "std::cout", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, …
Run Code Online (Sandbox Code Playgroud)

gcc

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

如果计数大于类型的宽度,是右移未定义的行为吗?

我刚检查了C++标准.看来以下代码不应该是未定义的行为:

unsigned int val = 0x0FFFFFFF;
unsigned int res = val >> 34;  // res should be 0 by C++ standard,
                               // but GCC gives warning and res is 67108863
Run Code Online (Sandbox Code Playgroud)

并从标准:

E1 >> E2的值是E1右移E2位位置.如果E1具有无符号类型或者E1具有有符号类型和非负值,则结果的值是E1/2 ^ E2的商的整数部分.如果E1具有有符号类型和负值,则生成的值是实现定义的.

根据标准,由于34不是负数,因此变量res将为0.

GCC为代码段提供以下警告,并且res67108863:

警告:右移计数> =类型的宽度

我还检查了GCC发出的汇编代码.它只是调用SHRL,而SHRL的英特尔指令文件res不是ZERO.

那么这是否意味着GCC没有在英特尔平台上实现标准行为?

c++ assembly standards gcc undefined-behavior

32
推荐指数
2
解决办法
6393
查看次数

gcc和g ++/gcc-c ++有什么区别?

在我看来,gcc可以处理c和c ++项目,那么为什么需要g ++/gcc-c ++呢?

g ++和gcc-c ++有什么区别?

gcc g++

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

如何在Linux中编译c ++程序?

我创建了一个文件hi.cpp,我写了下面给出的命令:

#include <iostream>
using namespace std;
int main ()
{
  cout << "Hello World! ";
  cout << "I'm a C++ program";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我使用以下命令在我的RHEL 6机器上运行它

gcc hi.cpp
Run Code Online (Sandbox Code Playgroud)

我有一些错误如下:

[chankey@localhost ~]$ gcc hi.cpp
/tmp/cc32bnmR.o: In function `main':
hi.cpp:(.text+0xa): undefined reference to `std::cout'
hi.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, const char*)'
hi.cpp:(.text+0x19): undefined reference to `std::cout'
hi.cpp:(.text+0x1e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, const char*)'
/tmp/cc32bnmR.o: In function `__static_initialization_and_destruction_0(int, int)': …
Run Code Online (Sandbox Code Playgroud)

c++

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

'memcpy'未在此范围内声明

我正在尝试用gcc和eclipse构建一个开源的c ++库.但我得到此错误'memcpy'未在此范围内声明

我试着包含memory.h(和string.h),如果我点击"打开声明",eclipse会找到该函数,但gcc会给我错误.

我能怎么做?

#include <algorithm>
#include <memory.h>

namespace rosic
{
   //etc etc
template <class T>
  void circularShift(T *buffer, int length, int numPositions)
  {
    int na = abs(numPositions);
    while( na > length )
      na -=length;
    T *tmp = new T[na];
    if( numPositions < 0 )
    {

      memcpy(  tmp,                buffer,              na*sizeof(T));
      memmove( buffer,            &buffer[na], (length-na)*sizeof(T));
      memcpy( &buffer[length-na],  tmp,                 na*sizeof(T));
    }
    else if( numPositions > 0 )
    {
      memcpy(  tmp,        &buffer[length-na],          na*sizeof(T));
      memmove(&buffer[na],  buffer,            (length-na)*sizeof(T));
      memcpy(  buffer,      tmp,                        na*sizeof(T));
    }
    delete[] tmp; …
Run Code Online (Sandbox Code Playgroud)

c++ gcc

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