Невозможно выполнить .o файл, созданный Netbeans

У меня есть проект на локальном компьютере, и я хочу запустить / отладить тест cppunit на сервере (Debian). Я создал .o файлы с Netbeans и установил права на исполняемый файл.

drwxr-xr-x 2 myName myGroup   4096 18. Dec 08:40 .
drwxr-xr-x 3 myName myGroup   4096 18. Dec 08:40 ..
-rwxr-xr-x 1 myName myGroup 393488 18. Dec 08:40 SisyTestData.o
-rwxr-xr-x 1 myName myGroup   3127 18. Dec 08:40 SisyTestData.o.d
-rwxr-xr-x 1 myName myGroup  30016 18. Dec 08:40 SisyTestDataRunner.o
-rwxr-xr-x 1 myName myGroup    173 18. Dec 08:40 SisyTestDataRunner.o.d

Если я пытаюсь запустить ./SisyTestDataRunner из каталога, где он находится, я получаю

bash: ./SisyTestDataRunner: Datei oder Verzeichnis nicht gefunden

(означает: файл или каталог не найден)

Если я пытаюсь запустить ./SisyTestDataRunner.o я получаю

bash: ./SisyTestDataRunner.o: Kann die Datei nicht ausführen.

(означает: не удается выполнить файл)

SisyTestDataRunner выглядит следующим образом:

#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>

int main() {
// Create the event manager and test controller
CPPUNIT_NS::TestResult controller;

// Add a listener that colllects test result
CPPUNIT_NS::TestResultCollector result;
controller.addListener(&result);

// Add a listener that print dots as test run.
CPPUNIT_NS::BriefTestProgressListener progress;
controller.addListener(&progress);

// Add the top suite to the test runner
CPPUNIT_NS::TestRunner runner;
runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());
runner.run(controller);

// Print test in a compiler compatible format.
CPPUNIT_NS::CompilerOutputter outputter(&result, CPPUNIT_NS::stdCOut());
outputter.write();

return result.wasSuccessful() ? 0 : 1;
}

Файл SisyTestData содержит один тестовый сценарий, который работал, когда я запустил его на локальном компьютере (но он работал на сервере).

Разве вообще невозможно запустить файл, созданный netbeans, из командной строки? Должен ли я скомпилировать и связать его непосредственно на сервере?

0

Решение

Хорошо! идти по шагам.

  • 1) Как уже правильно прокомментировали другие рецензенты, объектные файлы генерируются компилятором, так что компоновщик может связывать библиотеки кода и сгенерированный код, в дополнение к выполнению большего количества операций.

Для этого, я думаю, вы можете напрямую связать их объектные файлы на удаленной машине в этом режиме:

 $ g++ -o mybin myobj.o

Обратите внимание, что компоновщик должен быть в состоянии найти все ссылки на библиотеку, включенную в проект!

  • 2) Обычно в стандартном проекте C ++ в NetbeansIDE после сборки проекта вы можете найти исполняемый файл в папке «dist», пример «dist / Debug / GNU-Linux-x86». Этот файл готов к запуску на локальном и удаленном компьютере. машины на базе linux.

  • 3) Возможно, вашему исполняемому файлу нужна системная библиотека.
    Ссылки на эту библиотеку на вашем локальном компьютере указаны правильно, но не на удаленном компьютере

Чтобы решить эту проблему, вам может помочь команда,

 $ ldd mybin

Вы можете просмотреть весь процесс, упрощенный на этом скриншоте:

Вы можете просмотреть весь процесс, упрощенный на этом скриншоте:

  • 4) Я хотел бы уточнить еще один важный момент: среду IDE NetBeans можно настроить на использование любого компилятора и любых параметров.
    В настоящее время наиболее распространенные версии NetbeansIDE под Linux по умолчанию настроены на использование GCC, установленного на вашем компьютере, и это дает понять, что объектные файлы, сгенерированные из NetbeansIDE, такие же, как вы генерировали бы скомпилированные непосредственно из консоли.

Этапы компиляции в NetBeans:

Этапы компиляции в NetBeans:

0

Другие решения

Вы не запускаете объектные файлы. Объектные файлы используются компоновщиком для создания реального исполняемого файла.

Создание программы из набора исходных файлов на C ++ (или C) выполняется в несколько этапов:

  1. Сначала текущий исходный файл передается через препроцессор. Это программа, которая обрабатывает такие вещи, как #include,
  2. Затем фактический компилятор получает предварительно обработанный источник и создает объектный файл (например, SisyTestData.o).
  3. Все объектные файлы и возможные внешние библиотеки используются компоновщиком для создания окончательной исполняемой программы.
4