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 2025 | 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 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: PyDevice and an IOC |
From: | Josh Fiddler via Tech-talk <tech-talk at aps.anl.gov> |
To: | Florian Feldbauer <florian at ep1.ruhr-uni-bochum.de> |
Cc: | tech-talk at aps.anl.gov |
Date: | Wed, 8 Dec 2021 06:12:59 -0500 |
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
HTH Florian
On 12/8/21 2:48 AM, Josh Fiddler via Tech-talk wrote:
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