Linux下的gcc编译问题

zhouxiaoming33 2005-03-17 09:35:22
为啥使用semaphore和shared memory的程序,在编译成可执行文件时都要加-lrt
例如:gcc test.c -o test.o -lrt
不加-lrt就会显示sem_open...shm_open未被引用

有这样一段编译文件
-----------------------------------------------------------
gcc -c MODBUS.c -o MODBUS.o
ar -r libMODBUS.a MODBUS.o serialport.o error.o inifile.o
gcc test.c -o test.o -static -L. -lMODBUS
-----------------------------------------------------------
我在MODBUS.c中使用了semaphore和shared memory,因为文件里没加-lrt参数,所以会显示sem_open,shm_open等函数未被引用错误,但是加-lrt参数,gcc test.c -o test.o -static -L. -lMODBUS -lrt,编译也不通过。
请大家指教
...全文
798 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
meda0719 2005-04-14
  • 打赏
  • 举报
回复
静态编译-static参数不能和-lrt连用,去掉-static就行了
sharkhuang 2005-03-18
  • 打赏
  • 举报
回复
回复人: yjf7888(我爱月儿) ( ) 信誉:99 2005-03-17 21:43:00 得分: 0


用-lrt连接librt库而已,查sem_...的文档时应该有说明编译时需用-lrt的




对的
zhouxiaoming33 2005-03-18
  • 打赏
  • 举报
回复
现在的问题是,静态连接库和librt库连用,编译不通过阿
-----------------------------------------------------------
gcc -c MODBUS.c -o MODBUS.o
ar -r libMODBUS.a MODBUS.o serialport.o error.o inifile.o
gcc test.c -o test.o -static -L. -lMODBUS
-----------------------------------------------------------
我在MODBUS.c中使用了semaphore和shared memory,因为文件里没加-lrt参数,所以会显示sem_open,shm_open等函数未被引用错误,但是加-lrt参数,gcc test.c -o test.o -static -L. -lMODBUS -lrt,编译也不通过。
xfzhao_cn 2005-03-17
  • 打赏
  • 举报
回复
对啊,有提示,才好解决啊,
最好你还是在好好提示的错误信息吧.
yjf7888 2005-03-17
  • 打赏
  • 举报
回复
用-lrt连接librt库而已,查sem_...的文档时应该有说明编译时需用-lrt的
gdhyj 2005-03-17
  • 打赏
  • 举报
回复
编译通不过是什么提示撒
qfxx 2005-03-17
  • 打赏
  • 举报
回复
http://linux.chinaunix.net/doc/program/2001-05-08/580.shtml
qfxx 2005-03-17
  • 打赏
  • 举报
回复
POSIX无名信号量
POSIX的无名信号量的函数有以下几个:
int sem_init(sem_t *sem,int pshared,unsigned int value);
int sem_destroy(sem_t *sem);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem);
int sem_getvalue(sem_t *sem);
编译包含上面这几个函数的程序要加上-lrt选贤,以连接librt.so库

zhouxiaoming33 2005-03-17
  • 打赏
  • 举报
回复
这就是编译上面三条出现的错误
zhouxiaoming33 2005-03-17
  • 打赏
  • 举报
回复
/tmp/ccsj4BqE.o(.text+0x7d): In function `test_CommRead':
: undefined reference to `sem_open'
/tmp/ccsj4BqE.o(.text+0x93): In function `test_CommRead':
: undefined reference to `sem_wait'
/tmp/ccsj4BqE.o(.text+0xad): In function `test_CommRead':
: undefined reference to `sem_post'
/tmp/ccsj4BqE.o(.text+0xc6): In function `test_CommRead':
: undefined reference to `sem_wait'
/tmp/ccsj4BqE.o(.text+0x117): In function `test_CommRead':
: undefined reference to `sem_post'
./libMODBUS.a(MODBUS.o)(.text+0xd8b): In function `Create_Shm':
: undefined reference to `sem_unlink'
./libMODBUS.a(MODBUS.o)(.text+0xda4): In function `Create_Shm':
: undefined reference to `sem_open'
./libMODBUS.a(MODBUS.o)(.text+0xdba): In function `Create_Shm':
: undefined reference to `sem_close'
./libMODBUS.a(MODBUS.o)(.text+0xe1c): In function `Opera_Shm':
: undefined reference to `sem_open'
./libMODBUS.a(MODBUS.o)(.text+0xe51): In function `Opera_Shm':
: undefined reference to `sem_wait'
./libMODBUS.a(MODBUS.o)(.text+0xe87): In function `Opera_Shm':
: undefined reference to `sem_post'
collect2: ld returned 1 exit status

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧