考虑以下示例:
#include <signal.h>
extern "C" {
static void signalHandler(int signal) {}
}
int main(int, char**)
{
sigset (SIGTERM, signalHandler);
return 0;
}
CC test.cpp
成功。
但
CC test.cpp -std=c++11
Undefined first referenced
symbol in file
sigset test.o
ld: fatal: symbol referencing errors
我还尝试了以下方法:
CC test.cpp -std=c++11 -lstdc++ -lgcc_s -lc
但产生相同的错误。-m64
也无济于事。
也没有 - lstdc++ -lgcc_s -lCrunG3
。
操作系统:Solaris 11 编译器:来自 Oracle Solaris Studio 12.4 的 CC
要求的输出:
me@myhost:~/projects/cpptest> CC -std=c++11 -c test.cpp -o test.o
me@myhost:~/projects/cpptest> nm -A test.o | grep sigset
test.o: [14] | 0| 0|FUNC |GLOB |0 |UNDEF |_Z6sigset
me@myhost:~/projects/cpptest> nm -A /usr/lib/libc.so | grep sigset
/usr/lib/libc.so: [527] | 883372| 224|FUNC |LOCL |2 |16 |__csigsetjmp
/usr/lib/libc.so: [5694] | 736724| 420|FUNC |WEAK |3 |16 |_sigset
/usr/lib/libc.so: [6599] | 883868| 28|FUNC |GLOB |3 |16 |_sigsetjmp
/usr/lib/libc.so: [4906] | 833680| 532|FUNC |WEAK |3 |16 |_thr_sigsetmask
/usr/lib/libc.so: [6267] | 736724| 420|FUNC |GLOB |3 |16 |sigset
/usr/lib/libc.so: [4590] | 883868| 28|FUNC |GLOB |3 |16 |sigsetjmp
/usr/lib/libc.so: [2244] | 0| 0|FILE |LOCL |0 |ABS |sigsetops.c
/usr/lib/libc.so: [4502] | 833680| 532|FUNC |GLOB |3 |16 |thr_sigsetmask
me@myhost:~/projects/cpptest>
如果我使用<csignal>
而不是<signal.h>
,我会收到以下错误:
"test.cpp", line 17: Error: The function "sigset" must have a prototype.