Невозможно связать общую библиотеку с Eclipse в Ubuntu - PullRequest
1 голос
/ 19 февраля 2020

Отказ от ответственности: я не являюсь Eclipse-кодером на Linux, и я воздержусь от того, чтобы называть его именами после того, как не смогу создать оболочку для простого EXE со связанной общей библиотекой (DLL в Engli sh).

Пожалуйста, наберитесь терпения - я подробно опишу то, что я сделал ...

Буду признателен, если кто-нибудь скажет мне, что происходит ... Я работал с C / C ++ Visual Studio десятилетиями, но не могу понять, что происходит в этом средневековом инструменте (Eclipse) ...

  • Я установил Eclipse 2019-x в Ubunty 18.04, а также установил CDT.

  • Я создал и создал общую библиотеку, проект C ++. Библиотека имеет API-стиль C и класс C ++. Он находится по адресу / home / leon / Projects / RLV2. Работает нормально.

RLV2Shared.h

#ifndef RLV2SHARED_H_
#define RLV2SHARED_H_

#include "Logger.h"
using namespace CPlusPlusLogging;

#include "shared_EXPORTS.h"  // automatically generated by cmake
                         // by the GENERATE_EXPORT_HEADER macro

extern "C" int SHARED_EXPORT ValidateCryptoLicense(const char* token, char* signedMsg, int& signedMsgLen);
//extern "C" int ValidateCryptoLicense(const char* token, char* signedMsg, int& signedMsgLen);

class SHARED_EXPORT RLV
//class RLV
{
public:

    CPlusPlusLogging::Logger* mpLogger = NULL; // Create the object pointer for Logger Class

    RLV();
    void mRLV();
    void InitLogger();
};

#endif /* RLV2SHARED_H_ */

RLV2Shared. cpp

#include <string>
#include <iostream>
#include <fstream>
#include <stdio.h>

#include "Logger.h"
#include "RLV2Shared.h"

using namespace CPlusPlusLogging;
using namespace std;

int ValidateCryptoLicense(const char* token, char* signedMsg, int& signedMsgLen)
{
    cout << "!!!Hello from ValidateCryptoLicense!!!" << endl;
    LOG_INFO("ValidateCryptoLicense has been called from external module\n");
    return 5;
}

RLV::RLV()
{
    InitLogger();

    LOG_INFO("RLV class constructor has been called\n");
}

void RLV::mRLV()
{
    LOG_INFO("RLV::mRLV function has been called)\n");
}
  • Я также создал и создал еще один простой проект на C ++ «Hello World», консольное приложение, расположенное по адресу / home / leon / Projects / RLVTest2. Я также создал subdir 'lib' в RLVTest2 и на этапе пост-сборки RLV2 я копирую файл libRLV2.so в этот 'lib'. Он также создает OK.

    #include "Logger.h"
    #include "RLV2Shared.h"
    

    int ValidateCryptoLicense (const char * token, char * signatureMsg, int & signatureMsgLen) {cout << "!!! Привет от ValidateCryptoLicense !!!" << endl; LOG_INFO («ValidateCryptoLicense вызван из внешнего модуля \ n»); возврат 5; } </p>

    RLV :: RLV () {InitLogger ();

    LOG_INFO("RLV class constructor has been called\n");
    

    }

    void RLV :: mRLV () {LOG_INFO ("функция RLV :: mRLV был назван) \ n "); }

Затем я добавляю общую библиотеку в exe-проект: Project> Properties> C ++ Build -> Settings -> GN CC C ++ Linker -> Libraries и имеет абсолютный путь к библиотеке. -L / home / leon / Projects / RLVTest2 / lib Я также добавил тот же путь к пути к библиотеке в C ++ Общие> Путь и символы> Путь к библиотеке Я также добавил библиотеку libRLV2.so в C ++ Общие> Путь и символы> Библиотеки exe-проект

Вот результат сборки exe:

Цель создания: RLVTest2 Вызов: G CC C ++ Linker g ++ -L / home / leon / Projects / RLVTest2 / lib -pthread -o "RLVTest2" ./src/RLVTest2.o -llibRLV2.so / usr / bin / ld: не удается найти -llibRLV2.so collect2: ошибка: ld вернул 1 файл состояния завершения работы: 48: рецепт для цели 'RLVTest2' ошибка make: *** [RLVTest2] Ошибка 1 «make all» завершается с кодом выхода 2. Сборка может быть неполной.

При добавлении пути к библиотеке в компоновщике в качестве полного пути он также жалуется на то же .. .

Создание цели: RLVTest2 Вызов: G CC C ++ Linker g ++ -L / home / leon / Projects / RLVTest2 / lib -pthread -o "RLVTest2" ./src/RLVTest2.o -l / home /leon/Projects/RLVTest2/lib/libRLV2.so / usr / bin / ld: не удается найти -l / home / leon / Pr ojects / RLVTest2 / lib / libRLV2.so makefile: 48: сбой рецепта для цели 'RLVTest2' collect2: ошибка: ld вернул 1 состояние выхода make: *** [RLVTest2] Ошибка 1 «make all» прекращается с кодом выхода 2. Сборка может быть неполным.

1 Ответ

0 голосов
/ 19 февраля 2020

Я не могу описать, как я злюсь на разработчиков (создателей) Eclipse ... Мне все равно, что это бесплатно - если ты что-то делаешь, делай это правильно - без мысли: «Я сделаю что-то так Смысл в том, что они собираются построить для меня памятник "...

Когда я изменил содержимое Project> Свойства> C ++ Build -> Настройки -> GN CC C ++ Linker -> Библиотеки (опция -l) с RLV2 связаны работы просто отлично ...

...