【发布时间】:2018-05-12 21:14:32
【问题描述】:
当我使用选项“-L”制作gcc编译命令时,我应该添加gblic库路径或添加-D_GNU_SOURCE,否则gcc会运行错误。
$gcc sscanf_test.c -I/si/usr/aa/include/arch -o sscanf_test_2 -m64 -L$ORACLE_HOME/precomp/lib/ -L$ORACLE_HOME/lib/ -L$ORACLE_HOME/lib/stubs/ -lc
$/tmp/ccq1Z6T1.o:function ‘main’:
sscanf_test.c:(.text+0x32):undefined reference to ‘__isoc99_sscanf’
sscanf_test.c:(.text+0xf8):undefined reference to ‘__isoc99_sscanf’
sscanf_test.c:(.text+0x1e4):undefined reference to ‘__isoc99_sscanf’
collect2: ld return 1
$gcc sscanf_test.c -I/si/usr/aa/include/arch -o sscanf_test_2 -m64 -L$ORACLE_HOME/precomp/lib/ -L$ORACLE_HOME/lib/ -L$ORACLE_HOME/lib/stubs/ -D_GNU_SOURCE
$gcc sscanf_test.c -I/si/usr/aa/include/arch -o sscanf_test_2 -m64 -L$ORACLE_HOME/precomp/lib/ -L$ORACLE_HOME/lib/ -L$ORACLE_HOME/lib/stubs/ /lib64/libc.so.6
现在,我很困惑为什么 gcc 需要 -D_GNU_SOURCE。另一台具有类似环境的机器可以在没有 -D_GNU_SOURCE 的情况下正常运行。
【问题讨论】:
-
什么是
gblic?你的意思是glibc? -
@SouravGhosh 我的意思是 GNU C 库下所有其他标准的超集。
-
为什么是这个 C++1 标签?这和 C++ 有什么关系?
-
@hrl,gcc 是编译器 C++ 是编程语言。一个怎么可能是另一个? gcc 是多种语言的编译器,其中包括 C 和 C++。