1

I have a python file that I want to run on the board. Hence I want to embed the python interpreter (written in C) in the board. I managed to write separate C project that runs the Python file. It compiles and runs as I want to. Here's the makefile for same:-

CC=gcc
CFLAGS=-I python3.5 -I config -I . -c -w
LDFLAGS= -lpython3.5m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions

all: classifier trainer test link

test:
    $(CC) $(CFLAGS) test.c

trainer: Trainer.c
    $(CC) $(CFLAGS) Trainer.c
    $(CC) Trainer.o $(LDFLAGS) -o Trainer

.ONESHELL:
classifier: Classifier.c 
    $(CC) $(CFLAGS) Classifier.c
    # $(CC) Classifier.o $(LLFLAGS) -o Classifier

link:
    $(CC) test.o Classifier.o $(LDFLAGS) -o test

clean:
    rm -f Trainer.o Trainer Classifier.o Classifier

http://dpaste.com/3BCY2RE is my entire directory of project "hello" (It is not the one from the examples).

I included "Classifier.h" in my "hello.c" and I am getting the following errors: http://dpaste.com/3KKCF84

Compiler include options (No preincludes):

"${CG_TOOL_ROOT}/include"
"${workspace_loc:/${ProjName}/TerrainPredict}"
"${workspace_loc:/${ProjName}/TerrainPredict/config}"
"${workspace_loc:/${ProjName}/TerrainPredict/python3.5}"
"${SW_ROOT}/examples/boards/ek-tm4c1294xl"
"${SW_ROOT}"

Linker file search paths:

"libc.a"
"${workspace_loc:/${ProjName}/TerrainPredict/libterrainclf.a}"
"${SW_ROOT}/driverlib/ccs/Debug/driverlib.lib"

and:

"${CG_TOOL_ROOT}/lib"
"${workspace_loc:/hello/TerrainPredict/libterrainclf.a}"
"${CG_TOOL_ROOT}/include"

Am I wrong with some of my configurations? Or is this some problem with python interpreter? Any help is greatly appreciated

EDIT:- As @KevinDTimm suggested, the problem is that there is no pyconfig.h for my environment. This file is required by python to define important variables like source of system clock. I tried removing safety checks in existing pyconfig.h. The first error I am getting is in pytime.h as :

"_PyTime_t need signed 64-bit integer type"

Which was further because of the following code block:

#ifdef PY_INT64_T
/* _PyTime_t: Python timestamp with subsecond precision. It can be used to
   store a duration, and so indirectly a date (related to another date, like
   UNIX epoch). */
typedef PY_INT64_T _PyTime_t;
#define _PyTime_MIN PY_LLONG_MIN
#define _PyTime_MAX PY_LLONG_MAX
#else
#  error "_PyTime_t need signed 64-bit integer type"
#endif

It appears to me that it needs a variable that stores time. I need help in assigning that variable.

Matin H
  • 870
  • 8
  • 16
Meet Taraviya
  • 869
  • 1
  • 8
  • 27

1 Answers1

1

From the linked problem

The multiarch error message is a bit misleading. It's not failing because there's a multiarch problem, it's failing because there's a multi-OS problem. /usr/include/python*/pyconfig.h is trying to figure out where to find the real pyconfig.h from, and since it doesn't know, it's bailing out.

You essentially need a pyconfig.h generated for the target environment. I don't know what produced pyconfig.h, perhaps building cython from source? pyconfig.h looks like something generated by gnu autoconf, so there should not be any big problems in generating it.

KevinDTimm
  • 14,226
  • 3
  • 42
  • 60
  • I figured out the same in the meanwhile! How to get a pyconfig.h for TI boards? Is there a work around that does not require it? How to write one if it is must? – Meet Taraviya Jun 07 '17 at 13:55
  • Sorry but I don't have an answer - I know what the problem is, but not the detailed solution – KevinDTimm Jun 07 '17 at 14:46