Visual Studio, Marmalde C++: импорт libpython.a, запуск кода Python во встроенном интерпретаторе под рукой

Я пытаюсь запустить код Python во встроенном интерпретаторе для устройств arm; Построен в визуальной студии 2012, используя мармеладную студию.

Я собрал свою архивную статическую библиотеку ссылок, libpython.a, и поместил в \lib\arm\libpython.a (и libpython_d.a)

Я скомпилировал библиотеки python для ARM, загрузка в 'libpython.a', кажется, работает нормально, "VS:intellisense" выдает мне ошибки, когда я указал неправильный тип данных аргумента функции extern. (это хорошо, значит что-то связано по крайней мере)

мой мармеладный файл сборки.mkb выглядит так:

files
{
    RunPython.cpp
}

subprojects
{
}
librarys
{
    <arm_shared>
    "./lib,libpython"
}

RunPython.cpp

extern void PyRun_SimpleString(const char*);
extern void Py_Initialize(void);
extern void Py_Finalize(void);


        const char *pycode=
            "print('This is python code')\n";

        // Main entry point for the application
        int main()
        {

        //python shared library test

          Py_Initialize();
          PyRun_SimpleString(pycode);             
          Py_Finalize();

            return 0;
        }

Вопрос: варианты, с которыми я имею дело? ошибка MSB6006: "link.exe" завершен с кодом 1.

У меня отключена оптимизация всей программы


ОБНОВИТЬ:

Я переустановил свою среду разработки на новой 64-битной Windows-7 с установленной Visual Studio 2012 Express и мармеладом 7.2.

я добавил соответствующие ссылки в файл моего проекта; все еще получают: ошибка MSB6006: "link.exe" завершен с кодом 1.

я решил исследовать с помощью processmonitor: дерево процессов, чтобы увидеть каталоги, к которым он обращается во время выполнения (учитывая, что нужная мне библиотека находится в папке с именем "libpython":

arm-none-eaabi-g++.exe
command:
"c:/marmalade/7.2/s3e/gcc/win32/bin/arm-none-eabi-g++.exe" "@arm-none-eabi-g++_cmd_line_MainThread.txt"

childprocess:
collect2.exe
command:
"c:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/collect2.exe" "--sysroot=c:\marmalade\7.2\s3e\gcc\win32\bin\../arm-none-eabi" "-X" "-pie" "-o" "Debug_RunPython_vc11x_gcc_arm/RunPython.elf" "c:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/crti.o" "c:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/crtbegin.o" "c:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/crt0.o" "-Lc:/marmalade/7.2/s3e/lib/arm" "-Lc:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4" "-Lc:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc" "-Lc:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib" "-Lc:/marmalade/7.2/s3e/gcc/win32/bin/../arm-none-eabi/lib" "@C:\Users\root\AppData\Local\Temp\cc8DfmXx" "--start-group" "-lgcc" "-lc" "--end-group" "c:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/crtend.o" "c:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/crtn.o"

childprocess:
ld.exe
command: "c:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/bin/ld.exe" "@C:\Users\root\AppData\Local\Temp\cce3XLB7"

какие-либо идеи относительно того, почему компоновщик инст даже смотрит в каталогах? должно быть что-то, что я делаю неправильно, или это особая проблема с мармеладом, я собираюсь попытаться поместить свою библиотеку в папки, в которые она смотрит, посмотреть, работает ли она

другая вещь, которая озадачивает, - то, что нет НИКАКОГО ПРОСТРАНСТВА между аргументами -l и python

1> c: /marmalade/7.2/s3e/gcc/win32/bin /../ lib / gcc / arm-none-eabi / 4.7.4 /../../../../ arm-none- eabi / bin / ld.exe: не удается найти -lC:/Marmalade/7.2/s3e/lib/arm/python_d.a


РЕДАКТИРОВАТЬ: Ошибка 1 ошибка: ld вернул 1 состояние выхода collect2.exe Проблема с компоновщиком

1> Build started: Project: RunPython_vc11x, Configuration: GCC ARM Debug Win32 
1>  ARM Compiling(GCC) c:\python_compile\RunPython.cpp ...
1>  ARM Linking(GCC) ...
1>  c:/marmalade/7.2/s3e/gcc/win32/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/bin/ld.exe: cannot find -llibpython_d
1>collect2.exe : error : ld returned 1 exit status
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Я решил это, добавив каталог моей библиотеки в свойствах (с /, а не \, своего рода счетчик интуитивно понятен):

C / C++> general> Дополнительные каталоги включения: с помощью c:/.../lib/arm (НЕ C:...\lib\arm) Linker>general> Дополнительные каталоги включения: с использованием c:/.../lib/arm (НЕ C:... \ lib \ arm) Линкер>input> дополнительные зависимости: libpython_d.a


РЕДАКТИРОВАТЬ: раньше у меня были проблемы с Visual Studio, говоря "функция слишком много аргументов", но я обнаружил, что это просто вопрос возврата к заголовочным файлам Python, чтобы сопоставить мой внешний тип данных с типом библиотечных функций.

Ошибка внешней функции C++: слишком много аргументов для работы

1 ответ

Разобрался, мармеладное промежуточное ПО, добавляет "lib" и добавляет "_d.a" при компоновке. так что просто ссылка "библиотека" ex, lib"библиотека" _d.a

MKB:

    files
    {
        RunPython.cpp
    }


    librarys
    {
        <arm_shared>
        "../python-master,python"
    }
includepaths
{

    ../pythonMaster/
    ../pythonMaster/upstream/Python
    ../pythonMaster/upstream/Include
}

ROOTFOLDER
  +-- lib
       +-- arm
       |   +-- libBASENAME.a
       |   +-- libBASENAME_d.a
       |   +-- v5
       |       +-- libBASENAME.a
       |   +-- v6
       |       +-- libBASENAME.a
       |       +-- vfp
       |           |-- libBASENAME.a
       +-- x86
           +-- libBASENAME.lib
           +-- libBASENAME_d.lib
           +-- darwin
               +-- libBASENAME.lib
               +-- libBASENAME_d.lib
Другие вопросы по тегам