1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 <2021> 2022 2023 2024 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 <2021> 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: PyDevice and an IOC |
From: | Florian Feldbauer via Tech-talk <tech-talk at aps.anl.gov> |
To: | tech-talk at aps.anl.gov |
Date: | Wed, 8 Dec 2021 09:05:07 +0100 |
Hey Josh,
Looking at your g++ call your IOC does not get linked against libpython3.8 which explains the undefined references to python bindings.
Can you execute the command `$(PYTHON_CONFIG) --ldflags --embed | sed 's/-[^l][^ ]*//g' | sed 's/-l//g'` by hand and check the output?
It should look like this:
$> python3-config --ldflags --embed | sed 's/-[^l][^ ]*//g' | sed 's/-l//g'
python3.9 crypt pthread dl util m m
This is for Klemen Vodopivec the author of `PyDevice`
1) thanks for making this2) I'm having some issues getting a simple ioc to build with pydev support
I'm using a Raspberry Pi and linux-arm as the host architecturefor specific reasons: using EPICS base 3.15.6, python 3.8.10 on ubuntu for arm64 in a docker container
The module itself builds alright. and the testing ioc runs just fineWhen I create a basic IOC, with makeBaseApp.pl using the ioc template,adding the lines as indicated:```analogCtrlIOC_DBD += pydev.dbdanalogCtrlIOC_LIBS += pydevSYS_PROD_LIBS += $(shell $(PYTHON_CONFIG) --ldflags --embed | sed 's/-[^l][^ ]*//g' | sed 's/-l//g')with the RELEASE file for the IOC pointed at the location of the support module
with `make` i get```/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -DUNIX -Dlinux -O3 -g -Wall -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/epics/base/include/compiler/gcc -I/epics/base/include/os/Linux -I/epics/base/include -c ../analogCtrlIOCMain.cpp
/bin/sh: 0: Illegal option --
/usr/bin/g++ -o analogCtrlIOC -L/epics/analogCtrlIOC/lib/linux-arm -L/epics/base-3.15.6/lib/linux-arm -L/epics/support/PyDevice/lib/linux-arm -Wl,-rpath,/epics/analogCtrlIOC/lib/linux-arm -Wl,-rpath,/epics/base-3.15.6/lib/linux-arm -Wl,-rpath,/epics/support/PyDevice/lib/linux-arm -rdynamic analogCtrlIOC_registerRecordDeviceDriver.o analogCtrlIOCMain.o -ldbRecStd -ldbCore -lca -lCom -lpydev
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `Py_InitializeEx'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyLong_AsLong'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyBool_Type'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `_Py_TrueStruct'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyType_IsSubtype'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyUnicode_AsASCIIString'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyEval_RestoreThread'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyDict_SetItemString'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyList_Size'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyFloat_AsDouble'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `Py_Finalize'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `_Py_Dealloc'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyList_GetItem'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyErr_Clear'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `Py_IncRef'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyRun_StringFlags'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `Py_DecRef'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyDict_New'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyErr_SetString'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyBytes_AsString'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyExc_TypeError'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyEval_SaveThread'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `_Py_FalseStruct'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyEval_GetBuiltins'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyObject_IsTrue'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyModule_Create2'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyErr_Occurred'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyFloat_Type'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyArg_UnpackTuple'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyErr_Print'
/usr/bin/ld: /epics/support/PyDevice/lib/linux-arm/libpydev.so: undefined reference to `PyImport_AppendInittab'
collect2: error: ld returned 1 exit status
make[3]: *** [/epics/base/configure/RULES_BUILD:204: analogCtrlIOC] Error 1
make[3]: Leaving directory '/epics/analogCtrlIOC/analogCtrlIOCApp/src/O.linux-arm'
make[2]: *** [/epics/base/configure/RULES_ARCHS:58: install.linux-arm] Error 2
make[2]: Leaving directory '/epics/analogCtrlIOC/analogCtrlIOCApp/src'
make[1]: *** [/epics/base/configure/RULES_DIRS:84: src.install] Error 2
make[1]: Leaving directory '/epics/analogCtrlIOC/analogCtrlIOCApp'
make: *** [/epics/base/configure/RULES_DIRS:84: analogCtrlIOCApp.install] Error 2
root@daq-pi-002:/epics/analogCtrlIOC#```
PYTHON_CONFIG is set for python3
any thoughts?
Josh
-- Ruhr-Universität Bochum AG der Experimentalphysik I Dr. Florian Feldbauer NB 2/131 / Fach 125 Universitätsstr. 150 D-44801 Bochum Office: NB 2/134 Phone: (+49)234 / 32-23563 Fax: (+49)234 / 32-14170 https://paluma.ruhr-uni-bochum.de