sbinet/go-python

many undefined and error when compile

Ryan007 opened this issue · 6 comments

# github.com/sbinet/go-python
/usr/local/lib/libpython2.7.a(posixmodule.o): In function `posix_tmpnam':
/root/Python-2.7.13/./Modules/posixmodule.c:7614: warning: the use of `tmpnam_r' is dangerous, better use `mkstemp'
/usr/local/lib/libpython2.7.a(posixmodule.o): In function `posix_tempnam':
/root/Python-2.7.13/./Modules/posixmodule.c:7561: warning: the use of `tempnam' is dangerous, better use `mkstemp'
/usr/local/lib/libpython2.7.a(complexobject.o): In function `_Py_c_abs':
/root/Python-2.7.13/Objects/complexobject.c:214: undefined reference to `hypot'
/usr/local/lib/libpython2.7.a(complexobject.o): In function `_Py_c_pow':
/root/Python-2.7.13/Objects/complexobject.c:143: undefined reference to `hypot'
/root/Python-2.7.13/Objects/complexobject.c:144: undefined reference to `pow'
/root/Python-2.7.13/Objects/complexobject.c:145: undefined reference to `atan2'
/root/Python-2.7.13/Objects/complexobject.c:149: undefined reference to `sincos'
/root/Python-2.7.13/Objects/complexobject.c:148: undefined reference to `exp'
/root/Python-2.7.13/Objects/complexobject.c:149: undefined reference to `log'
/usr/local/lib/libpython2.7.a(complexobject.o): In function `complex_remainder':
/root/Python-2.7.13/Objects/complexobject.c:616: undefined reference to `floor'
/usr/local/lib/libpython2.7.a(complexobject.o): In function `complex_divmod':
/root/Python-2.7.13/Objects/complexobject.c:642: undefined reference to `floor'
/usr/local/lib/libpython2.7.a(floatobject.o): In function `float_is_integer':
/root/Python-2.7.13/Objects/floatobject.c:996: undefined reference to `floor'
/usr/local/lib/libpython2.7.a(floatobject.o): In function `float_as_integer_ratio':
/root/Python-2.7.13/Objects/floatobject.c:1748: undefined reference to `floor'
/usr/local/lib/libpython2.7.a(floatobject.o): In function `float_divmod':
/root/Python-2.7.13/Objects/floatobject.c:786: undefined reference to `floor'
/root/Python-2.7.13/Objects/floatobject.c:760: undefined reference to `fmod'
/usr/local/lib/libpython2.7.a(floatobject.o): In function `float_rem':
/root/Python-2.7.13/Objects/floatobject.c:728: undefined reference to `fmod'
/usr/local/lib/libpython2.7.a(floatobject.o): In function `_Py_double_round':
/root/Python-2.7.13/Objects/floatobject.c:1103: undefined reference to `round'
/root/Python-2.7.13/Objects/floatobject.c:1142: undefined reference to `floor'
/root/Python-2.7.13/Objects/floatobject.c:1156: undefined reference to `fmod'
/usr/local/lib/libpython2.7.a(floatobject.o): In function `float_pow':
/root/Python-2.7.13/Objects/floatobject.c:888: undefined reference to `floor'
/root/Python-2.7.13/Objects/floatobject.c:898: undefined reference to `fmod'
/root/Python-2.7.13/Objects/floatobject.c:863: undefined reference to `fmod'
/root/Python-2.7.13/Objects/floatobject.c:873: undefined reference to `fmod'
/root/Python-2.7.13/Objects/floatobject.c:922: undefined reference to `pow'
/usr/local/lib/libpython2.7.a(longobject.o): In function `PyLong_FromString':
/root/Python-2.7.13/Objects/longobject.c:1869: undefined reference to `log'
/usr/local/lib/libpython2.7.a(dynload_shlib.o): In function `_PyImport_GetDynLoadFunc':
/root/Python-2.7.13/Python/dynload_shlib.c:94: undefined reference to `dlsym'
/root/Python-2.7.13/Python/dynload_shlib.c:130: undefined reference to `dlopen'
/root/Python-2.7.13/Python/dynload_shlib.c:141: undefined reference to `dlsym'
/root/Python-2.7.13/Python/dynload_shlib.c:133: undefined reference to `dlerror'
/usr/local/lib/libpython2.7.a(signalmodule.o): In function `timeval_from_double':
/root/Python-2.7.13/./Modules/signalmodule.c:112: undefined reference to `floor'
/root/Python-2.7.13/./Modules/signalmodule.c:112: undefined reference to `floor'
/root/Python-2.7.13/./Modules/signalmodule.c:113: undefined reference to `fmod'
/root/Python-2.7.13/./Modules/signalmodule.c:113: undefined reference to `fmod'
/usr/local/lib/libpython2.7.a(posixmodule.o): In function `posix_forkpty':
posixmodule.c:(.text+0x273f): undefined reference to `forkpty'
/usr/local/lib/libpython2.7.a(posixmodule.o): In function `posix_openpty':
posixmodule.c:(.text+0x42f6): undefined reference to `openpty'
collect2: ld returned 1 exit status

when i run make install, it failed
is that my python version wrong, please help me?

base info:
centos6.2 x64
python-2.7.13
go version go1.7.4 linux/amd64

how did you install python?

AFAIK, centos-6 had python-2.6.

here is what I did in a docker container:

#> docker run -it --rm centos:6 bash
$> yum update -y
$> yum install -y centos-release-SCL
$> yum install -y python27 python27-python-devel
$> yum install -y gcc git
$> export PKG_CONFIG_PATH=/opt/rh/python27/root/usr/lib64/pkgconfig:$PKG_CONFIG_PATH

$> cd /
$> curl -O -L https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
$> mkdir /goroot
$> cd /goroot
$> tar -zxf ../go1.7.4.linux-amd64.tar.gz
$> export GOROOT=`pwd`/go
$> export PATH=$GOROOT/bin:$PATH

$> cd /
$> mkdir /gopath
$> cd /gopath
$> export GOPATH=`pwd`
$> go get -d github.com/sbinet/go-python
$> cd $GOPATH/src/github.com/sbinet/go-python
$> make install
go get  -compiler="gc" .

$> echo $?
0

FIRST OF ALL THANK YOU

install by source code and complied, it works fine.

ok.
so, what is the output of:

$> pkg-config --cflags --libs python-2.7
-I/usr/include/python2.7 -lpython2.7

?

(the linker error would seem to indicate that you are missing -lm and -ldl)

$> export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig

PKG_CONFIG_PATH should set to cgo. pkgconfig will give proper link options to build math lib.

I spent 2 days figuring out why ubuntu failed to make go-python.

in VSCode you can build and run by editing launch.json

"version": "0.2.0",
"configurations": [
    {
        "name": "Launch",
        "type": "go",
        "request": "launch",
        "mode": "auto",
        "program": "${fileDirname}",
        "env": {
            "PKG_CONFIG_PATH":"$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig"
        },
        "args": []
    }
]

}

$> whereis pkgconfig
pkgconfig: /usr/lib/x86_64-linux-gnu/pkgconfig /usr/lib/pkgconfig /usr/local/lib/pkgconfig /usr/share/pkgconfig

and find out python3.pc in located pkgconfig folders
usr/lib/x86_64-linux-gnu/pkgconfig$> ls
expat.pc geoclue-2.0.pc libssl.pc ncursesw.pc python-3.7m.pc sqlite3.pc uuid.pc xorg-wacom.pc
fontconfig.pc grilo-plugins-0.3.pc libxcrypt.pc openssl.pc python-3.7.pc tcl8.6.pc x11.pc xrender.pc
form.pc ice.pc menu.pc panel.pc python-3.8-embed.pc tcl.pc xau.pc xscrnsaver.pc
formw.pc libcrypto.pc menuw.pc panelw.pc python-3.8.pc tic.pc xcb.pc xt.pc
freetype2.pc libcrypt.pc ncurses++.pc pthread-stubs.pc python3-embed.pc tinfo.pc xdmcp.pc zlib.pc
gcalc-2.pc libpng16.pc ncurses.pc python-2.7.pc python3.pc

in cgoflags_unix.go file

// +build !windows

package python

// #cgo pkg-config: python-2.7
// #include "go-python.h"
import "C"

cgo pkg-config: python-2.7 --> pkg-config should know to find python-2.7.pc file path

sudo apt-get update -y
sudo apt-get install -y pkg-config

if don't install pkg-config , install pkg-config.