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

OS: 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