2

考虑以下示例:

#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.
4

0 回答 0