- 论坛徽章:
- 0
|
有源程序如下:
tryflock.c
- #include <sys/types.h>;
- #include <sys/file.h>;
- #include <fcntl.h>;
- int main()
- {
- flock(0,LOCK_EX | LOCK_UN | LOCK_NB);
- }
复制代码
编译时出现如下错误:
- bash-2.03# cc -O2 -c tryflock.c
- tryflock.c: In function `main':
- tryflock.c:8: `LOCK_EX' undeclared (first use in this function)
- tryflock.c:8: (Each undeclared identifier is reported only once
- tryflock.c:8: for each function it appears in.)
- tryflock.c:8: `LOCK_UN' undeclared (first use in this function)
- tryflock.c:8: `LOCK_NB' undeclared (first use in this function)
复制代码
检查/usr/include/sys/file.h文件里并没有LOCK_EX、LOCK_UN和LOCK_NB的定义,但在/usr/ucbinclude/sys/file.h文件找到他们的定义,如下:
- bash-2.03# grep 'LOCK_' /usr/ucbinclude/sys/file.h
- #define LOCK_SH 1 /* shared lock */
- #define LOCK_EX 2 /* exclusive lock */
- #define LOCK_NB 4 /* don't block when locking */
- #define LOCK_UN 8 /* unlock */
复制代码
于是修改源程序如下:
- #include <sys/types.h>;
- #include <sys/file.h>;
- #include <fcntl.h>;
- #include <sys/flock.h>;
- int main()
- {
- /* flock(0,LOCK_EX | LOCK_UN | LOCK_NB); */
- flock(0,2 | 8 | 4);
- }
复制代码
再次编译的时候顺利通过,并生成了 tryflock.o 文件,继续运行如下命令:
- cc -s -o tryflock tryflock.o
复制代码
报错如下:
- bash-2.03# cc -s -o tryflock tryflock.o
- Undefined first referenced
- symbol in file
- flock tryflock.o
- ld: fatal: Symbol referencing errors. No output written to tryflock
- collect2: ld returned 1 exit status
复制代码
但是相同的程序在Red Hat下却可以顺利编译通过。我该怎么办呢? |
|