golang-org-x-exp 打包遇到 undefined reference 错误


#1

错误日志:

[   82s] # golang.org/x/mobile/gl
[   82s] /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: $WORK/b112/_x002.o: in function `process':
[   82s] ../contrib/src/golang.org/x/mobile/gl/work.go:34: undefined reference to `processFn'
[   82s] /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: ../contrib/src/golang.org/x/mobile/gl/work.go:36: undefined reference to `processFn'
[   82s] /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: ../contrib/src/golang.org/x/mobile/gl/work.go:39: undefined reference to `processFn'
[   82s] collect2: error: ld returned 1 exit status

但实际上定义 processFn 的库文件和 work.go 在同一个目录,怎么会找不到呢????同一个目录下的库文化不需要单独指定路径啊?

https://build.opensuse.org/build/home:hillwood:branches:X11:Deepin:Go/openSUSE_Tumbleweed/x86_64/golang-org-x-exp/_log


#2

mobile 里面有 C 函数,也有头文件 work.h。正常是需要编译一个 .a 装到系统上的,但是 golang-packaging 那伙人就是不让我编译和安装 .a,他们写的东西就只是把 work.go 当成 go source 给装上了。

你在编译 exp 的时候,会先编译这个 mobile 的 gl,再编译 exp。要全是 go 文件那自然没什么问题,但是这里需要编译 C,而头文件没装是不行的


#3

work.h 也是打包进了 mobile 的啊。


#4
#cgo linux              LDFLAGS: -lGLESv2

那就在这里补充下 work.h 的 path 看看?


#5

加了 -L/usr/share/go/1.11/contrib/src/golang.org/x/mobile/gl/ 还是报错。


#6

@hillwood

[   65s] + echo 'Copying deps to /home/abuild/rpmbuild/BUILD/contrib'
[   65s] Copying deps to /home/abuild/rpmbuild/BUILD/contrib
[   65s] ++ get_gocontrib_path
[   65s] +++ rpm --eval '%{_datadir}'
[   65s] +++ rpm --eval %go_api_ver
[   65s] ++ echo /usr/share/go/1.11/contrib
[   65s] ++ get_buildcontrib_path
[   65s] ++ echo /home/abuild/rpmbuild/BUILD/contrib
[   65s] + cp -rT /usr/share/go/1.11/contrib/src /home/abuild/rpmbuild/BUILD/contrib/src

看日志的这里。

它是把 /usr/share/go/1.11/contrib/src 里的东西全部复制到 /home/abuild/rpmbuild/BUILD/contrib/src 里,然后在后者编译的。我感觉跟这里有关系。把

-L/usr/share/go/1.11/contrib/src/golang.org/x/mobile/gl/ 

改成

-L. -lwork

试试看呢?


#7

不行,这样改连 golang-org-x-mobile 都编译失败。
我感觉不是 work.h 没被读取,如果我把 Mesa-libGLESv3-devel 从 golang-org-x-exp 的 spec 里面注释掉,work.h 里面的错误提示“install on Ubuntu with: sudo apt-get install libegl1-mesa-dev libgles2-mesa-dev libx11-dev”是会显示出来的。