当前位置:  技术问答>linux和unix

关于gcc,g++编译的简单问题,大家帮帮我啊,急!!!

    来源: 互联网  发布时间:2015-07-29

    本文导语:  大家好:       我是一个刚学linux编程的菜鸟。最近正在做一个项目,项目里我自己编写了一个类,直接用gcc -o 编译,编译不通,于是我用g++ -o 编译,通过。       可是过了一阵,我还需要在主函数里面开...

大家好:
      我是一个刚学linux编程的菜鸟。最近正在做一个项目,项目里我自己编写了一个类,直接用gcc -o 编译,编译不通,于是我用g++ -o 编译,通过。
      可是过了一阵,我还需要在主函数里面开几个线程,于是我用pthread_create函数。用法如下:
#include "stdio.h"
#include "pthread.h"
void thread(void)
{
   printf("just a test!");
   return;
}

int main(void)
{
    pthread_t id;
    int ret = pthread_create(&id, NULL, (void*)thread, NULL);
    pthread_join(id, NULL);
    return 0;
}
可是,这次是g++ -lpthread -o 怎么也编不通,老报错:invalid conversion form 'void ' to 'void*',我把自己编写的类去掉,用gcc -lpthread -o 编译,就可以通过。请问如何是好!
      总结一下,主要问题两点:1.gcc 能不能编译有类的工程,如果能,怎么编译
                              2.g++ 能不能编译有pthread_create的工程,如果能,怎么编译

      提前谢谢大家,希望能给予指导!
                                                                                  雷子

|
pthread_create(&id, NULL, (void*)thread, NULL);
                           ~~~~~~~
要求function原型:void * start_routine(void *)
或pointer
  void * (*start_routine)(void *)      

|
看看这个你就会明白的:

#include 
#include 
#include 
#include 


class Worker {
   public: 
   //这里要加上static
   static void* my_worker_thread(void* some_arg ){
   while (1) { 
      fputc ('1', stderr); 
    }
   return NULL;
   }
};

int main () 
{
  pthread_t thread_id;
  Worker myworker;

  if( pthread_create (&thread_id, NULL, (Worker::my_worker_thread) , NULL) != 0 ){ 
   fputs( "Error: pthread can't be createdn", stderr);
   exit(1);
  }

  while (1) { 
    fputc ('0', stderr);
    sleep(1);
  }
  return 0;
}

|
首先,gcc是C编译器,g++是C++编译器,所以如果你用了C++的语法的话,就要用g++来编译。
其次,C++对很多地方,特别是类型转换做了严格的限制,所以你这里转换不了。需要这么写:
int ret = pthread_create(&id, NULL, void*(*)(void*)thread, NULL);

|
gcc 是编译c的
g++是编译c++的,有类的就是c++了

|
invalid conversion form 'void ' to 'void*'
这句是说你的代码里,有错误。而不是编译错误。
有类就要用g++

|
你要创建的线程执行是不是类的成员函数,如果是在定义函数前加上static应该就可以了

|
呵呵,UP!

    
 
 

您可能感兴趣的文章:

  • gcc编译生成的 libmynet.so库中的函数没法调用,不知道为什么,好心人帮帮忙啊!!
  • 偶是新手,关于FC5下的gcc编译C++的编译错误,谁来帮帮我?!
  • arm-linux-gcc交叉编译出错,但gcc编译没错,什么原因呢???
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • GCC3.4可以编译2.4内核吗 如何查看某版本内核是用哪个版本gcc编译的
  • 使用popen来执行gcc命令,如何根据读出来的gcc的输出来判断gcc是否编译成功?
  • 问:关于gcc编译器和g++编译器
  • 求一个编译好的的gcc编译器
  • 编译GCC时能不能只编译C/C++的编译器?
  • gcc编译时出错,gcc: installation problem, cannot exec `as': 没有那个文件或目录!!!求助呀呀!!!!!
  • 建立较差编译环境,编译gcc-3.4.4出错
  • gcc与arm-linux-gcc编译的问题???
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • Solaris8,安装了iconv,gcc和gcclib,然后用gcc编译c程序出错。
  • 使用eclipse 加入arm-elf-gcc 或arm-linux-gcc 编译器为什么不好使
  • 是否必须用同一版本GCC编译内核、应用程序、库甚至GCC自己?
  • linux x86_64下由于拷贝gcc的lib目录导致gcc编译器出错
  • GCC编译程序时,有自定义头文件,提示找不到该头文件,但他就在这个目录中,如何设置GCC参数?
  • cc与gcc的问题 iis7站长之家
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • ubuntu 10.10出现极其诡异的情况,使用gcc编译没任何反应,可以继续输入,但是不提示任何错误;使用make编译效果一样;
  • 求助:当用 gcc 编译时没,加上优化选项 -02 ,可是提示是 gcc: unrecognized option `-02'
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • GCC无法安装的问题,希望有人帮我( Debian 4.04ra无法安装GCC)
  • 疑惑softfloat的问题,并求arm-linux-gcc和arm-linux-softfloat-gcc4.1.1
  • 安装Oracel,关于ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-gcc gcc的问题
  • 卸载和安装GCC问题
  • gcc安装的问题
  • cc与gcc的问题
  • 关于gcc的问题!
  • gcc 问题
  • 内核版本问题 GCC版本问题
  • solaris下gcc问题
  • GCC 与 Samba 问题 ?
  • gcc-g++版本问题
  • gcc问题,求助
  • 请大虾支招啊-gcc 编译选项问题 以及 makefile的问题
  • 初学gcc使用的问题
  • ****求助,关于REDHAT LINUX 9下的GCC编译器问题.............
  • Ubuntu8.04安装GCC问题
  • gcc安装遇到的问题
  • 请问大虾有关在windows上移植GCC的问题。
  • 关于gcc的问题谢谢
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 命令:mips_fp_le-gcc,mipsel-gcc 是什么意思?跟一般的gcc有什么区别?
  • 怎样升级我的GCC呀,我用的RH7.2,GCC 2.96 ,我从网上下载了一个gcc-3.2.3.tar.gz
  • arm-elf-gcc 和 arm-linux-gcc有什么区别?arm-elf-gcc里的elf代表什么?
  • gcc-ccore、avr-gcc及arm-gcc的区别
  • gcc在哪里?bash:gcc:command not found
  • 如何删掉GCC3.0(我需要GCC2.0-----)
  • Windows版GCC TDM-GCC
  • 急问:如何卸掉gcc 3.2庄gcc 2.96
  • 有人遇到过吗,在安装GCC时提示,"checking gcc ...no "
  • 一套未安装gcc的Linux中安装gcc rpm包时时出现错误


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3