去运行时无法编译

时间:2015-08-06 09:41:19

标签: go cgo

我只是想知道为什么运行时无法构建。我们如何将标志(在这种情况下为-fpermissive)传递给golang编译器用于构建运行时的c编译器。我在ubuntu 12.04上使用gcc-4.6.2

../../../thirdparty/go1.4.2/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/src/runtime/cgo/gcc_linux_amd64.c: In function ‘void _cgo_sys_thread_start(ThreadStart*)’:
../../../thirdparty/go1.4.2/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/src/runtime/cgo/gcc_linux_amd64.c:45:41: error: invalid conversion from ‘void*’ to ‘__sigset_t*’ [-fpermissive]

编写的示例程序也无法编译,似乎在go代码中定义的nil是问题,我想知道其他人是如何工作的,golang编译器何时编译这个运行时代码?

gcc t.c -lpthread   -o t 
t.c: In function ‘void* hello_world(void*)’:
t.c:12:41: error: invalid conversion from ‘void*’ to ‘__sigset_t*’ [-fpermissive]
/usr/include/x86_64-linux-gnu/bits/sigthread.h:31:12: error:   initializing argument 3 of ‘int pthread_sigmask(int, const __sigset_t*, __sigset_t*)’ [-fpermissive]
rk@rk-VirtualBox:~$ gcc -fpermissive t.c -lpthread   -o t 
t.c: In function ‘void* hello_world(void*)’:
t.c:12:41: warning: invalid conversion from ‘void*’ to ‘__sigset_t*’ [-fpermissive]
rk@rk-VirtualBox:~$ cat  t.c

#include<pthread.h>
#include<stdio.h>
#include<signal.h>

#define nil ((void*)0)
static void*
hello_world(void  *vptr)
{
    sigset_t set;
    sigemptyset(&set);
    pthread_sigmask(SIG_BLOCK, &set, nil);
    printf("hello world");
    return NULL;
}

int main(int  ac, char **av)
{
    pthread_t t;
    pthread_create(&t, NULL, hello_world, NULL);
    pthread_join(t, NULL);
    return 0;
}


    /usr/include/x86_64-linux-gnu/bits/sigthread.h:31:12: error:   initializing argument 3 of ‘int pthread_sigmask(int, const __sigset_t*, __sigset_t*)’ [-fpermissive]
    make: *** [rulemanager] Error 2

0 个答案:

没有答案