✘~/workspace/gowork/src/pthread $ go build . # pthread ccode.c:12:15: warning: incompatible integer to pointer conversion passing 'pthread_t' (aka 'unsigned long') to parameter of type 'pthread_once_t *' (aka 'int *') [-Wint-conversion] /usr/include/pthread.h:495:42: note: passing argument to parameter '__once_control' here ccode.c:12:23: warning: null passed to a callee that requires a non-null argument [-Wnonnull] # pthread ccode.c:11: error: undefined reference to 'pthread_join' ccode.c:12: error: undefined reference to 'pthread_once' /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(generic-morestack-thread.o):function __wrap_pthread_create: error: undefined reference to 'pthread_once'
-------------------------------- Make the pthread_join and pthread_once as comments and recompile the file ```bash ~/workspace/gowork/src/pthread $ ldd main linux-vdso.so.1 (0x00007ffc58db4000) libgo.so.13git => /home/jxzhang/.local/gollvm/lib64/libgo.so.13git (0x00007fc599db0000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc599a12000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc5997fa000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc599409000) /lib64/ld-linux-x86-64.so.2 (0x00007fc59b6cb000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc5991ea000) ~/workspace/gowork/src/pthread $ nm /home/jxzhang/.local/gollvm/lib64/libgo.so.13git | grep -E "pthread_create|pthread_join|pthread_once" w pthread_create w pthread_once 0000000001089d70 t __wrap_pthread_create ~/workspace/gowork/src/pthread $ nm /lib/x86_64-linux-gnu/libpthread.so.0 | grep -E "pthread_create|pthread_join|pthread_once" 000000000000f9b0 t __GI___pthread_once 00000000000079b0 t __pthread_create_2_1 00000000000079b0 T pthread_create@@GLIBC_2.2.5 0000000000008b50 t __pthread_join 0000000000008b50 W pthread_join 000000000000f9b0 T __pthread_once 000000000000f9b0 W pthread_once 000000000000f850 t __pthread_once_slow ``` 在2021年4月6日星期二 UTC+8 下午9:15:25<JX Zhang> 写道: > I met some problem about pthread. > I wrote a cgo demo which use some pthread_* function, but it compile failed > > ccode.c > ``` > # include <stdio.h> > # include "ccode.h" > # include <pthread.h> > > int try_pthread(){ > pthread_t id; > int ret, i = 0; > ret = pthread_create(&id,NULL,(void *)thread,NULL); > for(i=0;i<=5;i++) > printf("This is main thread %d\n",i); > pthread_join(id,NULL); > pthread_once(id, NULL); > return 0; > } > > void thread() > { > int i=0; > for(i=0;i<=5;i++) > printf("this is thread %d\n",i); > } > ``` > > main.go > ``` > package main > > /* > #cgo CFLAGS: -I./ > #cgo LDFLAGS: -L./ > #include "ccode.h" > */ > import "C" > > func main() { > _ = C.try_pthread() > } > ``` > > the `pthread_create` can be searched, but the other two functions report > this: > ccode.c:11: error: undefined reference to 'pthread_join' > ccode.c:12: error: undefined reference to 'pthread_once' > > > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/5a0588db-118d-40f1-868e-58cabe62b131n%40googlegroups.com.