[ell-i-developers] Re: Embedding python in emulator

  • From: Jose Granados Vergara <jose.granados@xxxxxx>
  • To: Asif Sardar <engr.asif.sardar@xxxxxxxxxxxxxx>, "ell-i-developers@xxxxxxxxxxxxx" <ell-i-developers@xxxxxxxxxxxxx>
  • Date: Wed, 15 Oct 2014 18:52:30 +0000

Could you run the file command on the executable to see what it is?

There are some libraries that need to be installed on Ubuntu 64 bits to run 32 
bits (ia32-libs, gcc-multilib, g++-multilib, binutils-multiarch, ia32-libs-dev).

As a last resource you can try 32 bits isolation by installing a 32 bit Ubuntu 
in a virtual machine.

-Jose
________________________________
De: Asif Sardar [engr.asif.sardar@xxxxxxxxxxxxxx]
Enviado: miércoles, 15 de octubre de 2014 01:48 p.m.
Para: ell-i-developers@xxxxxxxxxxxxx
CC: Jose Granados Vergara; Lari Lehtomäki
Asunto: Re: [ell-i-developers] Re: Embedding python in emulator

Yup, cross-compiling will not work, in website the procedure was basically 
cross-compiling python for target platform.

Anyway, it seems to be 32-bit vs 64-bit platform issue. I separately compiled 
and linked a C++ program to embed python in it using 32-bit python. It compiled 
and linked with those CFLAGS and LDFLAGS, but the executable was not running 
reporting error: cannot execute binary file: Exec format error. I am using 64 
bit OS Ubuntu and when I compile the above program using the default python I 
have in Ubuntu, it compiled, linked and worked. Also, the following errors 
seems to be processor architectural issues with binaries. I don't have enough 
skills with kernel-level or OS system level debugging issues, so if anybody 
else got any ideas then please share with us on this platform.

The program is also attached to this e-mail, its very simple program to test 
embedding python in C/C++ programs.

I will stick to the procedure where python calls C/C++ code in emulator and in 
return gets values from the emulator using callbacks.

On Tue, Oct 14, 2014 at 8:58 PM, Pekka Nikander 
<pekka.nikander@xxxxxx<mailto:pekka.nikander@xxxxxx>> wrote:
I don't think cross-compiling python for ARM is the right way.  You will not be 
able to run the result anywhere.

--Pekka


On 2014–10–14, at 20:27 , Asif Sardar 
<engr.asif.sardar@xxxxxxxxxxxxxx<mailto:engr.asif.sardar@xxxxxxxxxxxxxx>> wrote:

By native I meant my own laptop e.g. using gcc-linux to compile python. I want 
to use python interpretor to be called from emulator code to call some python 
functions (This will help later on for multi-purposes e.g. we can call python 
from C/C++ independently). Currently, the callbacks I have implemented have to 
pass-on information to python by actually calling the emulator from python 
itself (2-way calling). If I am able to embed python in emulator, it will 
asynchronously or independently call python whenever needed from C/C++ code. 
Actually, the test libraries are written in python language in Robot Framework 
that is why I am interested to do these kind of functionality to both C/C++ and 
python.

I will try the steps in 
https://www.ailis.de/~k/archives/19-ARM-cross-compiling-howto.html#python to 
cross-compile the python for ARM itself. I will share the findings here!

On Tue, Oct 14, 2014 at 8:12 PM, Jose Granados Vergara 
<jose.granados@xxxxxx<mailto:jose.granados@xxxxxx>> wrote:
Isn't the emulator native? why do you need to bind Python to the ARM binaries?

-Jose
________________________________
De: Asif Sardar 
[engr.asif.sardar@xxxxxxxxxxxxxx<mailto:engr.asif.sardar@xxxxxxxxxxxxxx>]
Enviado: martes, 14 de octubre de 2014 08:04 p.m.
Para: Jose Granados Vergara
CC: ell-i-developers@xxxxxxxxxxxxx<mailto:ell-i-developers@xxxxxxxxxxxxx>; Lari 
Lehtomäki
Asunto: Re: Embedding python in emulator

Thanks Jose,

On native platform, its working for me as well. I think I have to re-compile or 
cross-compile 32-bit python using ARM tools e.g. using something like 
CXX=arm-none-linux-gnueabi-g++ and then rebuild robot framework.

I have to compile the emulator files using arm-tool chain and I am including 
the 32-bit python in it built with native gcc toolchain.

If anyone else has some suggestions that I will really appreciate!

On Tue, Oct 14, 2014 at 7:58 PM, Jose Granados Vergara 
<jose.granados@xxxxxx<mailto:jose.granados@xxxxxx>> wrote:
This worked for me:

something.c:

#include "Python.h"

int main()
{
    Py_Initialize();
    return 0;
}

~$ g++ -I/usr/include/python2.7 something.c -o something -lpython2.7


-Jose
________________________________
De: Asif Sardar 
[engr.asif.sardar@xxxxxxxxxxxxxx<mailto:engr.asif.sardar@xxxxxxxxxxxxxx>]
Enviado: martes, 14 de octubre de 2014 07:40 p.m.
Para: ell-i-developers@xxxxxxxxxxxxx<mailto:ell-i-developers@xxxxxxxxxxxxx>
CC: Lari Lehtomäki; Jose Granados Vergara
Asunto: Fwd: Embedding python in emulator

Hi,

Has anybody embedded python in C/C++ application. My platform is 64-bit and 
python binaries I am using for Runtime/emulator is 32-bit. I have added 
following flags in CFLAGS and LDFLAGS to compile and link the c/c++ files in 
emulator with (#include </path/32-bit-python/include/python.h>)


CFLAGS += -I/opt/pym32/bin/include/python2.7 -fno-strict-aliasing -DNDEBUG -g 
-fwrapv -O3 -Wall -Wstrict-prototypes

LDFLAGS += -L/opt/pym32/lib/python2.7/config -lpthread -ldl -lutil -lm 
-lpython2.7 -Xlinker -export-dynamic

The files compiles but breaks when linking. Can anybody help with following 
errors:

-----------------------
./libsystem_stm32f4discovery.a(Register.o): In function 
`Register::GPIO_Callback_Python(std::string, std::string, unsigned int, 
std::string)':
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:41:
 undefined reference to `Py_Initialize'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:43:
 undefined reference to `PyRun_SimpleStringFlags'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:44:
 undefined reference to `Py_Finalize'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:41:
 undefined reference to `Py_Initialize'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:43:
 undefined reference to `PyRun_SimpleStringFlags'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:44:
 undefined reference to `Py_Finalize'
./libsystem_stm32f4discovery.a(system_stm32f4xx.o): In function 
`__exchange_and_add':
/usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to 
`__atomic_fetch_add_4'
/usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to 
`__atomic_fetch_add_4'
/usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to 
`__atomic_fetch_add_4'
/usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to 
`__atomic_fetch_add_4'
-----------------------


---------- Forwarded message ----------
From: Asif Sardar 
<engr.asif.sardar@xxxxxxxxxxxxxx<mailto:engr.asif.sardar@xxxxxxxxxxxxxx>>
Date: Mon, Oct 13, 2014 at 6:17 PM
Subject: Embedding python in emulator
To: Pekka Nikander <pekka.nikander@xxxxxx<mailto:pekka.nikander@xxxxxx>>


Hi Pekka,

I am trying to include python.h in emulator/inc/register.h

I have to include cflags and ldflags in Makefile system of emulator e.g.


-I/opt/include/python2.7 -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall 
-Wstrict-prototypes

-L/opt/lib/python2.7/config -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker 
-export-dynamic

However, I am getting:
----------------------------------------------------
g++ -m32 -march=i386 -m32 -march=i386 -Xlinker -export-dynamic -o robot_library 
 robot_library.o stm32f4discovery.o libSPI.a "-L." 
"-L/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../variants/stm32f4discovery"
 "-lsystem_stm32f4discovery" -lstdc++
./libsystem_stm32f4discovery.a(Register.o): In function 
`Register::GPIO_Callback_Python(std::string, std::string, unsigned int, 
std::string)':
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:41:
 undefined reference to `Py_Initialize'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:43:
 undefined reference to `PyRun_SimpleStringFlags'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:44:
 undefined reference to `Py_Finalize'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:41:
 undefined reference to `Py_Initialize'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:43:
 undefined reference to `PyRun_SimpleStringFlags'
/home/asif/Ell-i-Working-Directory/Ell-i-Software-Development/Runtime/stm32/tests/robot_library/../../emulator/src/Register.cpp:44:
 undefined reference to `Py_Finalize'
./libsystem_stm32f4discovery.a(system_stm32f4xx.o): In function 
`__exchange_and_add':
/usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to 
`__atomic_fetch_add_4'
/usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to 
`__atomic_fetch_add_4'
/usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to 
`__atomic_fetch_add_4'
/usr/include/c++/4.8/ext/atomicity.h:49: undefined reference to 
`__atomic_fetch_add_4'
collect2: error: ld returned 1 exit status
make[1]: *** [robot_library] Error 1
-----------------------------------

Can you help me in including these flags in the Makefile system and link the 
python with it? It will help a lot, to call from c to python independently.



--
With Best Regards,
Asif Sardar.
+358 43 8265795<tel:%2B358%2043%208265795>



--
With Best Regards,
Asif Sardar.
+358 43 8265795<tel:%2B358%2043%208265795>



--
With Best Regards,
Asif Sardar.
+358 43 8265795<tel:%2B358%2043%208265795>



--
With Best Regards,
Asif Sardar.
+358 43 8265795<tel:%2B358%2043%208265795>




--
With Best Regards,
Asif Sardar.
+358 43 8265795

Other related posts: