EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

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  <20212022  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  <20212022  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

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 this 
2) 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 architecture
for 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 fine
When I create a basic IOC, with makeBaseApp.pl using the ioc template, 
adding the lines as indicated:
```
analogCtrlIOC_DBD += pydev.dbd
analogCtrlIOC_LIBS += pydev
SYS_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

Replies:
Re: PyDevice and an IOC Josh Fiddler via Tech-talk
References:
PyDevice and an IOC Josh Fiddler via Tech-talk

Navigate by Date:
Prev: Re: How to put the contents of a file in a waveform record Shuei YAMADA via Tech-talk
Next: Can single soft-IOC control multiple OMS SPI-MAXnet controllers? Mrinal Bera via Tech-talk
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  <20212022  2023  2024 
Navigate by Thread:
Prev: PyDevice and an IOC Josh Fiddler via Tech-talk
Next: Re: PyDevice and an IOC Josh Fiddler via Tech-talk
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  <20212022  2023  2024 
ANJ, 08 Dec 2021 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·