多线程 linux下gcc编译一直通不过

#include
2 #include
3 #include
4 #include
5
6 void print(pid_t);
7
8 sem_t *sem;
9 int val;
10 int main(int argc,char *argv[])
11 {
12 int n = 0;
13 if(argc != 2);
14 {
15 printf("please input afile name!\n");
16 exit(1);
17 }
18 sem = sem_open(argv[1],O_CREAT,0644,2);
19
20 while(n++<5)
21 {
22 if(fork()==0)
23 {
24 sem_wait(sem);
25 print(getpid());
26 sleep(1);
27 sem_post(sem);
28 printf("I'm finished,my pid is %d\n",getpid());
29 return 0;
30 }
31 }
32
33 wait();
34 sem_close(sem);
35 sem_unlink(argv[1]);
36 exit(0);
37 }
38
39 void print(pid_t pid)
40 {
41 printf("I get it,my pid is %d\n",pid);
42 sem_getvalue(sem,&val);
43 printf("Now the value have %d\n",val);
44 }

2个回答

try compile this with

gcc sem.c -o sem -lrt

 #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <semaphore.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void print(pid_t);

sem_t *sem;
int val;
 int main(int argc,char *argv[])
 {
 int n = 0;
 if(argc != 2);
 {
 printf("please input afile name!\n");
 exit(1);
 }
 sem = sem_open(argv[1],O_CREAT,0644,2);

 while(n++<5)
 {
 if(fork()==0)
 {
 sem_wait(sem);
 print(getpid());
 sleep(1);
 sem_post(sem);
 printf("I'm finished,my pid is %d\n",getpid());
 return 0;
 }
 }

 wait();
 sem_close(sem);
 sem_unlink(argv[1]);
 exit(0);
 }

 void print(pid_t pid)
 {
 printf("I get it,my pid is %d\n",pid);
 sem_getvalue(sem,&val);
 printf("Now the value have %d\n",val);
 }
iamoyjj
欧阳嘉 什么版本的gcc 试试 gcc sem.c -o sem -lpthread -lrt
2 年多之前 回复
leobegin2016
leobegin2016 不行啊 还是报错 错误我放下面了
2 年多之前 回复

图片说明

leobegin2016
leobegin2016 回复欧阳嘉: 再请教下 我在后面输入参数 编译通过 运行是怎么回事啊
2 年多之前 回复
leobegin2016
leobegin2016 回复欧阳嘉: 谢谢大神!
2 年多之前 回复
iamoyjj
欧阳嘉 你确定你链接 pthread 或者 rt库了?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
多线程 linux下gcc编译一直通不过
#includen 2 #includen 3 #includen 4 #includen 5 n 6 void print(pid_t);n 7 n 8 sem_t *sem;n 9 int val;n 10 int main(int argc,char *argv[])n 11 n 12 int n = 0;n 13 if(argc != 2);n 14 n 15 printf("please input afile name!\n");n 16 exit(1);n 17 n 18 sem = sem_open(argv[1],O_CREAT,0644,2);n 19 n 20 while(n++<5)n 21 n 22 if(fork()==0)n 23 n 24 sem_wait(sem);n 25 print(getpid());n 26 sleep(1);n 27 sem_post(sem);n 28 printf("I'm finished,my pid is %d\n",getpid());n 29 return 0;n 30 n 31 n 32 n 33 wait();n 34 sem_close(sem);n 35 sem_unlink(argv[1]);n 36 exit(0);n 37 n 38 n 39 void print(pid_t pid)n 40 n 41 printf("I get it,my pid is %d\n",pid);n 42 sem_getvalue(sem,&val);n 43 printf("Now the value have %d\n",val);n 44 n
linux下的gcc编译
gcc的简单的在linux平台上的编译和执行的一些最简单的事项
Linux下gcc编译
我们都知道,计算机只能读懂二进制数序列,而我们平常所书写的代码是如何让计算机读懂,然后进行执行的呢? 从一个代码到可执行程序可分为四步:预处理、编译、汇编、链接如何实现这四个步骤呢?预处理:gcc -E hello.c -o hello.i 编译:gcc -S hello.i -o hello.s 汇编:gcc -c hello.s -o hello.o 链接生成可执行文件:gcc hell
LINUX下的GCC编译指南
GCC编译指南主要讲解GCC在LINUX下的使用方法,有助于在开发。
linux下gcc编译静态库和动态库
库文件源代码,文件名称coutlib.c  1 #include   2 unsigned long count(unsigned int a, unsigned int b)   3 {   4         return a+b;   5 } 程序源代码,文件名称cout.c   1 #include   2 #include   3 int main(int a
linux下gcc编译conio.h问题
ubuntu下编译遇到 conio.h找不到文件的问题, conio.h非标准库,在windows平台可以,在linux平台用curses.h,ubuntu下通过sudo apt-get install libncurses5-dev安装即可。
Linux下的gcc编译问题
为啥使用semaphore和shared memory的程序,在编译成可执行文件时都要加-lrtrn例如:gcc test.c -o test.o -lrtrn不加-lrt就会显示sem_open...shm_open未被引用rnrn有这样一段编译文件rn-----------------------------------------------------------rngcc -c MODBUS.c -o MODBUS.ornar -r libMODBUS.a MODBUS.o serialport.o error.o inifile.orngcc test.c -o test.o -static -L. -lMODBUSrn-----------------------------------------------------------rn我在MODBUS.c中使用了semaphore和shared memory,因为文件里没加-lrt参数,所以会显示sem_open,shm_open等函数未被引用错误,但是加-lrt参数,gcc test.c -o test.o -static -L. -lMODBUS -lrt,编译也不通过。rn请大家指教rn
linux下GCC编译C程序
GNU编译器集(其前身为GNU C编译器)诞生于1987年。当时Richard Stallman(GNU项目的创办人)想要创建一个编译器,它可以满足他定义的“自由软件”概念,并可用来编译GNU项目发布的其他软件。GNU C编译器迅速在自由软件社区中流行开来,而且以其健壮性和可移植性而闻名。它已成为许多集成开发工具的基础,被世界各地的发行商应用在Linux和其他操作系统之上。 GCC已不再是主要针对GNU项目自身的软件的小型C语言编译器了。如今,它已支持了许多不同的语言,包括C、C++、Ada、Fortran、Objective C,甚至还有Java。事实上,现代Linux系统除了可以自豪地炫耀那些由GNU工具直接支持的语言以外,它还支持大量其他语言。日益流行的脚本语言Perl、Python和Ruby,以及正在不断发展的mono 可移植C#实现的确有助于冲淡人们对Linux编程的传统看法,但这完全是另外一个问题了。
Linux下gcc编译动态链接库
我写了如下程序: 1、sayhello.c用于生成动态链接库libsayhello.so【路径和main.c和my_so.h路径不同】 2、my_so.h头文件用于预处理过程中函数的声明 3、main函数,实现动态库函数的调用 刚开始用gcc -o sayhello.so -fPIC -shared  sayhello.c编译生成sayhello.so动态链接库
Linux下gcc编译得问题
相同得C文件,在两个linux系统下用gcc编译,执行得时候发现用sizeof计算出来得结构体大大小不同,虽然知道是位对齐方面的问题,有什么好得方法解决吗,怎么解决
linux下gcc编译问题请教
目前debug下编译未加入-s参数导致链接的可执行文件过大,而加了-s哪怕有-g也导致可执行文件缺乏调试信息,而在gdb下不好调试;rnrn加了-s后目标文件是未加前的1/10,但无法调试;有什么gcc编译参数既可以使目标文件不至于太大,而又能用gdb调试的吗?rnrnrn谢谢了!
linux下gcc编译fastcgi问题
FASTCGI头文件在/usr/local/include;库在 /usr/local/lib;rn用命令行编译:rngcc -I/usr/local/include -c [filename.c]rngcc -o [filename] [filename.o] -L/usr/local/lib -lfcgirn可以通过,但不能执行,显示error while loading shared libraries: libfcgi.so.0: cannot open shared object file: No such file or directoryrnrn谢谢了!
在LINUX下的GCC编译C++的问题?
在LINUX怎么用GCC编译C++?rn我用GCC编译C++后出不来结果.rn但是用C++命令编译C++后就可以.rn不知道是怎么回事,望高手指点.
Linux下 GCC编译总结
1、包含头文件时,最好是放在工程目录下,少用-I/home/之类的; 2、使用静态库时,采用全路径形式编译   gcc hello.c -o hello print.a; 3、使用动态链接库,采用把动态库文件放在/usr/lib、/lib、/usr/local/lib里,然后采用 gcc hello.c -o hello L/usr/local/lib -lprint形式使用动态库,这样移植到
linux下gcc编译与gdb调试
简单代码如下: main.c #include &lt;stdio.h&gt; void debug(char *str) { printf("debug info :%s\n", str); } main(int argc, char *argv[]) { int i, j; j = 0; for (i = 0; i &lt; 10; i++) { ...
linux下gcc编译的步骤
以前在Linux下gcc一个源文件直接就gcc + xxx.c ,然后执行就ok了。 最近通过了进一步的学习才知道原来这个过程气是是包括了四个步骤的。 1、预编译: 也就是处理由#开头的命令,gcc +  -E +源文件 + -o + 你想生成的新的文件名(xxx.i)。 例如:gcc   -E   hello.c   -o   hello.i  2、编译: 把生成的预编译文件
Linux下GCC编译C语言
Linux下GCC编译C语言Linux下GCC编译C语言 1.创建一个.C文件 # vi/vim name.c 2.编译name.c文件,生成可执行文件 # gcc name.c 3.执行文件,在默认情况下产生的可执行程序名为a.out # ./a.out 4.通常可以通过gcc的“-o”选项来指定自己的可执行程序名称。 # gcc -o name name.c 生成...
GCC编译通过但是VC6.0编译通不过
#include rnrnint main(void)rnrn char a = '\x0D';rn char sChar[15] = "Test Str""ing!!\0";rn puts("I LOVE THIS GAME!\n");rn printf( "XXX%c\n", a );rn printf( "%s\n", sChar );rn int i = 10;rn printf("The test: %d\n", i );rn return 0;rnrnrn这是怎么回事呢?
一个模板函数在linux下通不过
下面这个程序里面用到了模板,编译出错。 CentOSrn[root@localhost]# g++ test.cpp rntest.cpp: In function 'bool WriteHash_StringT()':rntest.cpp:10: error: expected `;' before 'it'rn可是在main里声明的iterator却没问题rn模板的用法有问题?rnrn代码如下:rn[root@localhost]# cat test.cpp rn#include rn#include rnusing namespace __gnu_cxx;rnusing namespace std;rnrntemplaternbool WriteHash_StringT()rnrn hash_map hmStringT;rn hash_map::iterator it;rn return true;rnrnrnint main()rnrnrn hash_map hm;rn hm[123]="value1";rn hm[234]="value2";rn rn hash_map::iterator it;rn for(it = hm.begin(); it!=hm.end();it++ )rn printf("%d %s\n", (*it).first, (*it).second.c_str() ); rn rn return 0;rnrn
linux下libxml2编译通不过
我是新手rn我在linux下安装了libxml2rn就是一般的安装rn./configurernmakernmake installrn然后用他里面example文件夹中的例子进行编译,就是通不过rn总提示没有那个目录什么的,请教怎么解决,谢谢
LINUX下如何用GCC编译动态库
RT,另外wl是什么选项?
Linux下如何用gcc编译动态库?
-
Linux下使用gcc编译出现的问题
一个最简单的hello,world程序.我像这样写:rn文件test.cpp:rn#include rnint main()rnrn printf("hello,world!\n");rn return 0;rnrn然后通过gcc test.cpprn这样是编译正确的.但改成如下写法:rn#include rnint main()rnrn std::cout << "hello,world!\n";rn return 0;rnrn这样却会报一大堆的错误.大概内容是:rn/tmp/ccj AGLKH.o(.text+0x14): In function 'main';rn: undefined reference to 'std::basic_ostream >........rn好象是c++的库不全还是怎么的?请问谁知道解决方法?
C++11 多线程gcc编译简单示例
1. 编辑源程序     vim hello.cpp #include #include void func(int x) { std::cout << x << " new thread\n"; } int main() { std::cout << "hello world\n"; std::thread t(func, 8); t.jo
Linux下的多线程
Linux下的c语言多线程教程。详细讲述了Linux下c语言编写多线程的方法。
Linux下多线程
Linux下对线程的创建(pthread_create)、退出(pthread_exit)、等待( pthread_join)等操作……
【gcc编译】使用gcc编译动态库
参考链接: 1、https://blog.csdn.net/a600423444/article/details/7206015#commentBox 下文代码链接:https://download.csdn.net/download/xiaoxiao133/10811400 测试代码是在Ubuntu18.04测试。 代码如下: hello.c #include &amp;lt;stdio.h&amp;gt; #...
gcc编译
gcc编译的一般过程 先是预处理产生的文件  。i 然后是汇编文件  。s 最后是二进制文件  。o 库文件    静态库 动态库 冒泡排序实例 静态库 动态库 警告提示 gdb调试
一个表单验证的问题~~~为何一直通不过呢?
rnrn这是一个表单验证!rnrn各位帮看看有什么错误没?rnrn怎么一直都通不过验证~~~~不管是不是含有特殊字符的rnrn郁闷....
【求助】Pro*C/C++预编译一直通不过
我用一段非常简单的.pc测试程序,用VC6.0进行预编译可以通过,生成.c文件。但是同样的rn.pc文件用oracle自带的pro*c/c++ 工具进行预编译时,一直都通不过,错误显示如下:rn“系统默认选项值取自于: C:\oracle\precomp\admin\pcscfg.cfgrnPCC-F-02044, CMD-LINE:选项值非法或超出范围: Studio\VC98\Include”。rnrn不知道是大家有没有遇到这个问题,我弄了一上午仍然没解决。我在pcscfg.cfg文件中已经加了一些设置:rnparse=fullrninclude="C:\Program Files\Microsoft Visual Studio\VC98\Include"rninclude="C:\oracle\precomp\public"rninclude="C:\oracle\oci\include"rnrn 希望能得到大家的指导,在此先谢过了!
GCC编译
我从网上下载了代码,但有两个文件,一个是makefile,一个是server.cpp,rn我以前从没用过makefile,怎么用啊???rn我想编译,在终端上怎么写啊??求解,谢谢
Linux下的简单C程序gcc编译、gdb调试。
链接:http://pan.baidu.com/s/1dE4Wgt7 密码:i63b
如何在Linux下用gcc编译c程序
Linux 内核和许多其他自由软件以及开放源码应用程序都是用 C 语言编写并使用 GCC 编译的。
linux gcc编译的程序在linux下无法运行
今天我的redhat 5企业版服务器突然出现了一个问题,以前都没事,我用gcc编译的程序无法运行,具体情况如下:rn我程序的文件名为client.c,我是这样编译的rngcc -c client.c -o clientrn就生成了一个 client 文件,而且没有任何错误和警告,但是生成的client文件没有可执行权限,不rn管是用 chmod +x client 还是用 chmod 777 client 执行都报一个错误rn bash: ./client: cannot execute binary filern我将gcc编译器重装了一遍,还是同样的问题,一点没改变,后来我发现这样编译是可以的:rngcc client.c -o client 或者 gcc client.crn生成的文件就可以执行了,但是一个文件可以这样,如果多个文件链接,不加 -c 参数就不行了rn请教高手这是怎么回事呢?
请教一下linux下gcc编译c++文件的问题
我机器上装的是redhat企业版5.4,gcc版本为4.5.1。近几天我从网上下载了SIMVoloen的源代码(c++源代码)。按照说明上说的先configure 然后make再make install 但是在make的时候总是出现如下信息:rn/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o: In function `_init':rn(.init+0x0): multiple definition of `_init'rn/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o:(.init+0x0): first defined herern/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o: In function `_fini':rn(.fini+0x0): multiple definition of `_fini'rn/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o:(.fini+0x0): first defined herern/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o:(.data.rel.ro+0x0): multiple definition of `__dso_handle'rn/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o:(.data.rel.ro+0x0): first defined herern/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtendS.o:(.dtors+0x0): multiple definition of `__DTOR_END__'rn/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtendS.o:(.dtors+0x0): first defined hererncollect2: ld returned 1 exit statusrnmake[5]: *** [libSimVoleon.la] 错误 1rnmake[5]: Leaving directory `/home/pzl/OPENSOURCE/SIMVoleon-2.0.1/lib/VolumeViz'rnmake[4]: *** [all-recursive] 错误 1rnmake[4]: Leaving directory `/home/pzl/OPENSOURCE/SIMVoleon-2.0.1/lib/VolumeViz'rnmake[3]: *** [all-recursive] 错误 1rnmake[3]: Leaving directory `/home/pzl/OPENSOURCE/SIMVoleon-2.0.1/lib'rnmake[2]: *** [all] 错误 2rnmake[2]: Leaving directory `/home/pzl/OPENSOURCE/SIMVoleon-2.0.1/lib'rnmake[1]: *** [all-recursive] 错误 1rnmake[1]: Leaving directory `/home/pzl/OPENSOURCE/SIMVoleon-2.0.1'rnmake: *** [all] 错误 2rn我在网上找了好几天都找不到答案,也试着用我所知道的各种办法去解决,但是就是解决不了。朢大侠救我。
如何在linux下用gcc编译c
用gcc编译c源程序要放在特定的文件夹下吗?
帮助,linux下用gcc编译c++程序
我现在用gcc编译c++程序,可是其编译的结果是显示“No such file or directory”.这些指明的文件都是程序中的头文件,由于头文件放在不同的地方,所以其找不到这些文件,问我如何把其他目录包括进去?rn我用的命令是gcc -c file.cxxrn我看了帮助,后来想用-Idir命令去包括一个目录,可是还是没有用, 假设我把这些文件放在同一目录下编译的话,由于头文件一层包一层,还是有同样的问题出现。请大家帮助一下,非常感谢!
linux下gcc编译c出现找不到库错误
装的linux,自带有gcc3.2rn现在装了gcc4.2rn用gcc4.2编译没有问题了,执行时出现了如下错误:error while loading shared libraries: libgomp.so.1: cannot open shared object file: No such file or directoryrnrn自己分析的就是类路径没有设置好。从网上找的是这样说的:rn在RH Linux下能直接在命令行上执行或在文件/etc/profile中添加下面一句:rnsetenv LD_LIBRARY_PATH 路径/lib:$LD_LIBRARY_PATHrn但是在命令行下运行这句说是setenv错误。改成set到是没有错误,但是运行程序还是有错。在/etc/profile中添加了后运行还会出现找不到库错误。rn请大家指出错误
Linux下gcc编译C程序指令小结
GCC是linux环境下,编译C程序的常用工具。 下面整理和总结一下常用的编译和执行指令。给需要帮助的初学Linux下C编程的同学看一下,希望会有帮助。
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法