免责声明:我不是Linux上的Eclipse编码器,在无法为带有链接的共享库(英文为DLL)的简单EXE创建 shell 程序后,我将避免称其名称。
请耐心等待-我将详细描述我的工作...
如果有人能告诉我发生了什么,我将不胜感激。我在C / C++ Visual Studio中工作了数十年,但无法弄清楚这个中世纪工具(Eclipse)的发生了什么...
它建立确定。
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");
}
我还在RLVTest2下创建了子目录'lib',并且在RLV2的构建后步骤中,我将文件libRLV2.so复制到了该'lib'
它还可以建立。
#include "Logger.h"
#include "RLV2Shared.h"
int ValidateCryptoLicense(const char * token ,char * signedMsg,int&signedMsgLen)
{
cout < LOG_INFO(“ValidateCryptoLicense已从外部模块调用\ n”);
返回5;
}
RLV::RLV()
{
InitLogger();
LOG_INFO("RLV class constructor has been called\n");
}
无效RLV::mRLV()
{
LOG_INFO(“RLV::mRLV函数已被调用)\ n”);
然后我将共享库添加到exe项目:
项目>属性> C++构建->设置-> GNCC C++链接器->库具有库的绝对路径。
-L / home / leon / Projects / RLVTest2 / lib
我还在C++常规>路径和符号>库路径下向库路径添加了相同路径。
我还将libRLV2.so库添加到exe项目的C++常规>路径和符号>库
这是建立exe的结果:
建立目标:RLVTest2
调用:GCC C++链接器
g++ -L / home / leon / Projects / RLVTest2 / lib -pthread -o“RLVTest2” ./src/RLVTest2.o -llibRLV2.so
/ usr / bin / ld:找不到-llibRLV2.so
collect2:错误:ld返回1退出状态
makefile:48:目标“RLVTest2”的配方失败
make:*** [RLVTest2]错误1
“全部制作”以退出代码2终止。构建可能不完整。
当在链接器中将库路径添加为完整路径时,它也会抱怨相同...
建立目标:RLVTest2
调用:GCC C++链接器
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 / Projects / RLVTest2 / lib / libRLV2.so
makefile:48:目标“RLVTest2”的配方失败
collect2:错误:ld返回1退出状态
make:*** [RLVTest2]错误1
“全部制作”以退出代码2终止。构建可能不完整。
最佳答案
我无法描述我对Eclipse开发人员(创建者)的愤怒。
我不在乎它是免费的-如果您做某事,就做对它-无需考虑:“我会做一些非常聪明的事情,以至于他们会为我建一座纪念碑”。
当我将Project> Properties> C++ Build-> Settings-> GNCC C++ Linker-> Libraries(-l option)的内容更改为RLV2链接时,工作正常...