无法在Ubuntu上将共享库与Eclipse链接



免责声明:我不是Linux上的Eclipse程序员,在无法为带有链接共享库(英语中的DLL(的简单EXE创建外壳后,我将避免对其进行命名。

请耐心等待——我会详细描述我所做的。。。

如果有人能告诉我发生了什么,我将不胜感激…我在C/C++Visual Studio工作了几十年,但无法弄清楚这个中世纪工具(Eclipse(中发生了什么。。。

  • 我在Ubunty 18.04上安装了Eclipse 2019-x,还安装了CDT。

  • 我创建并构建了一个共享库,一个C++项目。该库有一个C样式的API和一个C++类。它位于/home/lion/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_ */

RLV2共享.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 modulen");
return 5;
}
RLV::RLV()
{
InitLogger();
LOG_INFO("RLV class constructor has been calledn");
}
void RLV::mRLV()
{
LOG_INFO("RLV::mRLV function has been called)n");
}
  • 我还创建并构建了另一个简单的C++项目"Hello World",这是一个位于/home/lion/Projects/RLVTest2的控制台应用程序。我还在RLVTest2下创建了子目录"lib",在RLV2的后构建步骤中,我将文件libRLV2.so复制到该"lib"它也建立了OK。

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

    int ValidateCryptoLicense(const char*令牌,char*signedMsg,int&signedMsgLen({cout<lt;"!!!来自ValidateCryptoLicense的您好!!!"<lt;endl;LOG_INFO("ValidateCryptoLicense已从外部模块调用"(;返回5;}

    RLV::RLV(({InitLogger((;

    LOG_INFO("RLV class constructor has been calledn");
    

    }

    无效RLV::mRLV(({LOG_INFO("RLV::mRLV函数已被调用(\n"(;}

然后我将共享库添加到exe项目中:项目>属性>C++构建->设置->GNCC C++链接器->库具有到库的绝对路径。-L/home/lion/Projects/RLVTest2/lib我还在C++General>path and Symbols>library path下的库路径中添加了相同的路径我还将libRLV2.so库添加到了exe项目的C++General>Path and Symbols>Libraries

以下是exe的构建结果:

建筑目标:RLVTest2调用:GCC C++链接器g++-L/home/lion/Projects/RLVTest2/lib-phread-o"RLVTest2"/src/RLVTest2.o-libRLV2.so/usr/bin/ld:找不到-llibRLV2.socollect2:错误:ld返回1退出状态makefile:48:目标"RLVTest2"的配方失败make:***[RLVTest2]错误1"make all"终止,退出代码为2。生成可能不完整。

当在链接器中添加库路径作为完整路径时,它也会报告相同的。。。

建筑目标:RLVTest2调用:GCC C++链接器g++-L/home/lion/Projects/RLVTest2/lib-phread-o"RLVTest2"/src/RLVTest2.o-l/home/reon/Projects/RLVTest2/lib/libRLV2.so/usr/bin/ld:找不到-l/home/lion/Projects/RLVTest2/lib/libRLV2.somakefile:48:目标"RLVTest2"的配方失败collect2:错误:ld返回1退出状态make:***[RLVTest2]错误1"make all"终止,退出代码为2。生成可能不完整。

我无法描述我对Eclipse开发人员(创建者(有多愤怒。。。我不在乎它是免费的——如果你做了什么,就做对了——没有想过:"我会做一些聪明的事情,他们会为我建造一座纪念碑"。。。

当我将项目>属性>C++构建->设置->GNCC C++链接器->库(-l选项(的内容更改为RLV2链接工作时,一切都很好。。。

最新更新