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中编译[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Atmel Studio 7-静态库未定义函数参考

C ++静态库中的模板方法[重复]

如何将OpenSSL添加到Xcode项目中

总结一些笔记上的C和C++知识点

从命令行使用 clang 编译:兼容性问题 mac os X

XCode不能在预编译头中使用c++静态库。