无法在Ubuntu上将共享库与Eclipse链接
Unable to link Shared Library with Eclipse on Ubuntu
免责声明:我不是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链接工作时,一切都很好。。。
- 无法在Ubuntu上将共享库与Eclipse链接
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,E
- 如何在 Eclipse 中链接大型C++项目
- 如何在 Oracle Linux 上的 Eclipse 中编译和链接 boost 库
- 链接 .lib 并在 Windows 中使用 .dll 在 C++ 在 Eclipse 中
- Eclipse:尽管链接,SDL 库仍会导致未定义的引用
- Eclipse/MinGW 不会链接库
- Eclipse SDL.h 没有这样的文件或目录,所有内容都正确链接
- Eclipse CDT:如何在没有项目清理>>项目重建的情况下重新链接静态库
- 在Windows上运行的Eclipse上静态链接OpenCV
- 将 OpenCV 库与 Eclipse Ubuntu 链接起来
- Windows C++Eclipse MinGW链接动态和静态库
- 在eclipse中编译arduino时出现链接器分段错误
- Eclipse CDT链接选项-静态libgcc-静态libstdc++不影响Windows上的行为
- 创建独立的可执行 c++ 嵌入 Lua 动态库链接?(Eclipse,Ubuntu)
- Eclipse CDT - 用于交叉编译的链接 libcrypto.so
- C++eclipse链接器错误
- Eclipse链接器错误:不能包含httpClient-coos2d-x 3.2
- 为什么eclipse链接失败