C ++静态库未在mac上的xcode中编译[重复]
Posted
技术标签:
【中文标题】C ++静态库未在mac上的xcode中编译[重复]【英文标题】:C++ static library is not compiling in xcode on mac [duplicate] 【发布时间】:2019-02-04 14:49:08 【问题描述】:我是堆栈溢出的新手。我正在使用 xcode(9.3) 在 mac 上开发一个静态 c++ 库。它正在编译并运行良好,但后来我做了一些代码更改,之后它显示了一些奇怪的编译时错误。像 “/clang:-1: 链接器命令失败,退出代码为 1(使用 -v 查看调用)”。任何帮助都感激不尽。
Undefined symbols for architecture x86_64:
"LJCPPBL_CORE::LJCPPBL::Initialize(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
_main in main.o
"LJCPPBL_CORE::LJCPPBL::GetShortestPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float*)", referenced from:
_main in main.o
"LJCPPBL_CORE::LJCPPBL::GetJson()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
以上文字显示在日志中。
这是 LJCPPBL 头文件“LJCPPBL.hpp”
#ifndef LJCPPBL_hpp
#define LJCPPBL_hpp
#include <iostream>
#include "../Models/Models.hpp"
#include <list>
#include <string.h>
using namespace std;
using namespace LJCPPBL_Models;
namespace LJCPPBL_CORE
class LJCPPBL
public: static void Initialize(string clientAPIKEY);
public: static string GetJson();
public: static void SetJson(string strJson);
public: static list<Destination> GetDestinationsList();
public: static list<Point> GetShortestPath(string source, string destination, float* costOfPath);
;
#endif /* LJCPPBL_hpp */
这是LJCPPBL头文件“LJCPPBL.cpp”的实现
#include <iostream>
#include "LJCPPBL.hpp"
#include "../Models/Models.hpp"
#include "../DAL/DataAccess.cpp"
#include "../Plugins/JsonParser/json.hpp"
#include "SPC.cpp"
#include "GlobalValues.cpp"
#include <list>
using namespace std;
using namespace LJCPPBL_CORE;
using namespace LJCPPBL_DAL;
namespace LJCPPBL_CORE
void LJCPPBL::Initialize(string clientAPIKEY)
auto globalValues = new GlobalValues();
LJCPPBLGlobalValues = *globalValues;
LJCPPBLGlobalValues.ClientAPIKey = clientAPIKEY;
string LJCPPBL::GetJson()
LJCPPBLAPIDAL* objDAL = new LJCPPBLAPIDAL();
string mapPointsAndPathJson = objDAL -> GetMapsAndPointsJSON();
string mapDestinationJSON = objDAL -> GetMapDestinationsJSON();
json jsonObj = "MapPointsAndPathJSON", mapPointsAndPathJson, "MapDestinationJSON", mapDestinationJSON ;
return jsonObj.dump();
void LJCPPBL::SetJson(string strJson)
list<Destination> LJCPPBL::GetDestinationsList()
LJCPPBLAPIDAL* objDAL = new LJCPPBLAPIDAL();
return objDAL -> GetDestinations();
list<Point> LJCPPBL::GetShortestPath(string source, string destination, float* costOfPath)
return SPC::GetShortestPath(source, destination, costOfPath);
//#endif
在此先感谢您的帮助。
【问题讨论】:
嘿@IceFire,发表您的评论作为答案。 @AdolfoAbegg 好的 1.请了解如何从您的 IDE 获取可复制的文本错误消息。屏幕截图从来都不是传达这些信息的好方法。 2.您需要在问题本身中包含minimal reproducible example。不接受指向第三方网站的链接。 3.有什么变化? 【参考方案1】:右键单击链接器错误并选择“显示在日志中”,这将为您提供有关错误的真实详细信息。
很可能是一些未解析的外部符号,因此您可能没有将某些库或某些 cpp 文件链接到您的项目。
问题编辑后: 似乎有一些你没有链接的库“LJCPPBL”。至少,你没有链接核心模块。您需要设置库路径并将库文件添加到您的项目中。
【讨论】:
我已将日志文本粘贴到我的问题中。请你看看并帮助我。 @BijayDixit 我在答案中添加了一些内容 LJCPPBL 不是图书馆。它是我定义的一个类。我已经在我的代码中包含了类的代码 @BijayDixit 那么,您是否已将 cpp 文件添加到您的项目中? 是的,我已将 cpp 文件添加到我的项目中以上是关于C ++静态库未在mac上的xcode中编译[重复]的主要内容,如果未能解决你的问题,请参考以下文章