當前位置:首頁 » 編程語言 » linuxc調用python

linuxc調用python

發布時間: 2022-08-12 17:07:42

linux下要在C中嵌入python編譯的時候怎樣解決庫的連接問題

gcc編譯時,當使用動態庫編譯可以按照幾種寫法1.gcctest.c./libSDL2-2.so2.gcctest.c-lSDL2-23.gcctest.c-L/home/test-lSDL2-2一般的編譯參數都是按照2或3去寫2寫法的含義是從/lib或者/usr/lib目錄下尋找名稱為SDL2-2的庫,即尋找/lib/libSDL2-2.so或者/usr/lib/libSDL2-2.so文件進行鏈接,當然如果沒有動態庫就會去找靜態庫,再沒有應該就會在編譯時報錯3寫法的含義是從-L參數首先從指定的目錄中尋找需要鏈接的庫文件,隨後再去尋找系統文件夾中是否存在需要的庫1寫法的含義是將當前目錄下的./libSDL2-2.so.0文件鏈接進最終文件,因此執行readelf-aa.out後在動態庫部分所看到的路徑就是./libSDL2-2.so.0,進而在執行文件時僅會從當前目錄下尋找libSDL2-2.so.0文件,當執行文件時所在的目錄下沒有該文件時就會出現找不到庫文件的操作你第二次操作時,因為function.so庫文件與a.out文件在同一個目錄,同時也是在該目錄下執行的ldd操作及運行a.out,a.out在載入動態庫時從當前目錄下找到了所需要的庫文件,此時能夠執行成功(ldd命令實質是一個腳本,通過設置環境變數運行動態庫鏈接器來輸出所有待鏈接的動態庫)。你可以試試將a.out拷貝至其他目錄再次運行,將出現和第一次操作時一樣的現象,找不到function.so文件。具體的解決方法就是修改編譯參數,將./libSDL2-2.so.0修改為-lSDL2-2並將libSDL2-2.so.0文件拷貝至/usr/lib目錄下,並且可能因為沒有修改鏈接器的緩存文件(將可能找不到帶版本號後綴的動態庫),需要在/usr/lib目錄下建立一個文件連接(ln-slibSDL2-2.so.0libSDL2-2.so)或者直接修改名稱為libSDL2-2.so

㈡ linux怎麼使用python

不知你用什麼Linux,linux太多了,cent os,redhat,Fedora,還是Ubuntu等的?

一般主流的Linux都自帶python(有的自帶2.6版本,有的自帶2.7),在終端界面輸入Python,回車,如果能進入就代表自帶有,如果報錯即表示沒有,需要到Python官網下載安裝或者在終端界面使用yum命令或者apt get命令安裝Python

㈢ linux c語言調用Python腳本

比如什麼變數呢?
可以用命令行參數啊
system("python xxx.py arg1 arg2 ...")
如果讓python接收參數自己查一下

㈣ Python腳本在Linux上怎麼運行

一、首先下載安裝python,建議安裝2.7版本以上,3.0版本以下,由於3.0版本以上不向下兼容,體驗較差。

㈤ linux怎麼執行Python文件

如果是Python
2.x的Python文件,用Python命令執行:python
文件名;如果是Python
3的Python文件,用python3命令執行:python3
文件名。

㈥ linux下,C插入Python,就在include <python.h>上卡住了

拿出一個例子來分析一下,不就是總結嗎?

#include <Python.h>

char* python_code1 = "\
import wx\n\
f = wx.Frame(None, -1, 'Hello from wxPython!', size=(250, 150))\n\
f.Show()\n\
";
PyRun_SimpleString(python_code1);

char* python_code2 = "\
import sys\n\
sys.path.append('.')\n\
import embedded_sample\n\
\n\
def makeWindow(parent):\n\
win = embedded_sample.MyPanel(parent)\n\
return win\n\
";
PyObject* globals = PyDict_New();
PyObject* builtins = PyImport_ImportMole("__builtin__");
PyDict_SetItemString(globals, "__builtins__", builtins);
Py_DECREF(builtins);

// Execute the code to make the makeWindow function
result = PyRun_String(python_code2, Py_file_input, globals, globals);
// Was there an exception?
if (! result) {
PyErr_Print();
wxPyEndBlockThreads(blocked);
return NULL;
}
Py_DECREF(result);

// Now there should be an object named 'makeWindow' in the dictionary that
// we can grab a pointer to:
PyObject* func = PyDict_GetItemString(globals, "makeWindow");

㈦ 如何在linux下用c調用過python

#include <string>
#include <map>
#include <Python.h>

typedef std::map<std::string,PyObject*> pyMoleMap;
typedef pyMoleMap::iterator pyMoleMapIter;

class PyOperBase
{
public:

static int initPython() //must running at the main thread

{

if(m_isInit == true)

return true;

Py_Initialize();

if(!Py_IsInitialized())

{

return false;

}

//Need to specify the current path path only Linux

#ifdef LINUX
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");

#endif

//PyEval_InitThreads();

//PyEval_ReleaseThread(PyThreadState_Get());

m_isInit = true;

return true;

}

static int releasePython()

{

if(!m_isInit) return false;

pyMoleMapIter iter;

PyObject* pMole = NULL;

for(iter = m_MoleMap.begin(); iter != m_MoleMap.end(); iter++)

{

pMole = iter->second;

Py_DECREF(pMole);

}

m_MoleMap.clear();

//PyGILState_Ensure();

Py_Finalize();

m_isInit = false;

return true;

}

static bool getInitStatus()

{

return m_isInit;

}

static int getModleDictByScriptName(std::string& script, PyObject** object)

{

if(m_isInit != true)

return false;

PyObject *pName = NULL, *pMole = NULL;

pyMoleMapIter iter = m_MoleMap.find(script);

if(iter != m_MoleMap.end())

{

pMole = iter->second;

if(!getDictByModle(pMole,object))

return false;

return true;

}

pName = PyString_FromString(script.c_str());

pMole = PyImport_Import(pName);

Py_DECREF(pName);

if(!pMole)

{

return false;

}

if(!getDictByModle(pMole,object))

{

Py_DECREF(pMole);

return false;

}

m_MoleMap.insert(std::pair<std::string,PyObject*>(script,pMole));

return true;

}

private:

static int getDictByModle(PyObject* pModle, PyObject** ppDict)

{

PyObject *pDict = NULL;

pDict = PyMole_GetDict(pModle);

if(!pDict)

{

return false;

}

*ppDict = pDict;

return true;

}

static bool m_isInit;

static pyMoleMap m_MoleMap;
};

class PyThreadLock
{
public:
PyThreadLock(void)
{
state = PyGILState_Ensure( );
}

~PyThreadLock(void)
{
PyGILState_Release( state );
}
private:
PyGILState_STATE state;
};

.cpp文件如下

#include "XPS2SVG_py.h"
bool PyOperBase::m_isInit = false;
pyMoleMap PyOperBase::m_MoleMap;

我linux下環境變數配置好了python路徑,所以直接#include <Python.h>了
以上代碼在windows下跑沒問題。
但到linux下,pMole = PyImport_Import(pName);會返回空
應該是沒找到pName標識的模塊,但是pName標識標識的模塊文件就在可執行文件的當前目錄下

㈧ 問一個Python的問題,請問我現在要在linux用c語言來做一些計算,但是數據是由一個python寫的程序出來的

python可以嵌入到c語言中,也可以調用C的函數庫
如果只是數據的話,麻煩一點,可以將數據用python儲存在一個文件中,再由c讀取
至於i/o的問題,我具體也不清楚
個人也是非專業人士

㈨ 怎麼在linux上運行python

Linux默認是已經安裝好了Python程序
目前來說,大多數的Linux發行版是安裝了兩個版本的Python程序
一個是Python 2.x
一個是Python 3.x
一些系統自帶的程序文件需要Python 2的支持,另外Python 3又是大勢所趨
所以,我們最好不要動系統的Python版本
需要使用哪個版本直接聲明就可以了
運行Python的方法:
我們在Linux系統上打開終端
輸入python
會彈出Python 2的版本和解釋器
輸入python3
會彈出Python 3的版本和解釋器
所以我們一般情況下,運行python 2的程序就輸入命令
python 程序文件
運行python 3的程序輸入命令
python3 程序文件
這里我們默認使用版本為Python 3
在終端輸入命令
Python3
彈出Python的解釋器以>>>開頭
我們可以在上面輸入Python程序
它會直接輸出結果
比如:
我們這里輸入32+46,輸出結果為78
輸入print('hello python'),輸出結果hello python
注意:當我們運行.py文件時,文件里的32+46是不會直接列印出來的
必須加列印命令
print(32+46)
我們退出python3解釋器的快捷鍵不是Ctrl+C
而是Ctrl+Z
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於怎麼在linux上運行python的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!

熱點內容
62資料庫 發布:2025-01-20 22:49:15 瀏覽:365
安卓模擬大自然怎麼玩 發布:2025-01-20 22:46:55 瀏覽:361
科密加密卡片 發布:2025-01-20 22:45:01 瀏覽:111
蘋果的文件怎麼轉到安卓 發布:2025-01-20 22:43:10 瀏覽:652
c語言迴文串 發布:2025-01-20 22:43:09 瀏覽:767
垃圾壓縮價格 發布:2025-01-20 22:14:05 瀏覽:421
溫十系統如何看處理器配置 發布:2025-01-20 21:59:47 瀏覽:302
米號源碼 發布:2025-01-20 21:55:30 瀏覽:893
電信四川dns伺服器ip 發布:2025-01-20 21:54:51 瀏覽:92
電腦彈出腳本錯誤還能繼續使用嗎 發布:2025-01-20 21:42:29 瀏覽:586