首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ -未定义的符号链接器错误- Xcode

C++ -未定义的符号链接器错误- Xcode
EN

Stack Overflow用户
提问于 2015-07-25 08:17:57
回答 1查看 1.6K关注 0票数 1

我有三个C++文件,我得到了一个非常恼人的C++链接器错误。下面是错误:

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
  "tiled::debug::log(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
  _main in main.o
  error_callback(int, char const*) 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)

以下是我的文件:

main.cpp

代码语言:javascript
复制
#include "debug.hpp"
#include <GLFW/glfw3.h>

using namespace tiled;

void error_callback(int error, const char* description);

int main(int argc, char* argv[])
{
    debug::log("Initializing");
    glfwSetErrorCallback(error_callback);

    debug::log("Initializing GLFW...");
    if (!glfwInit())
    {
        debug::log("Failed to initialize GLFW!");

        glfwTerminate();
        return -1;
    }
    debug::log("Done");

    debug::log("Exiting program!");
    glfwTerminate();
    return 0;
}

void error_callback(int error, const char* description)
{
    std::string error_code;
    error_code.append("GLFW error ");
    error_code.append(std::to_string(error));

    debug::log(error_code);
    debug::log(description);
}

debug.hpp

代码语言:javascript
复制
#ifndef TILED_DEBUG_HPP
#define TILED_DEBUG_HPP

#include <ctime>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>

namespace tiled
{
    class debug {
    private:
        static std::vector<std::string> data;
        static std::ofstream log_file;

    public:
        static void log(const std::string& msg);
        static int write_logs();
    };
}

#endif /* TILED_DEBUG_HPP */

还有,debug.cpp

代码语言:javascript
复制
#include "debug.hpp"

namespace tiled
{
    void debug::log (const std::string& msg)
    {
        // Log to the console
        std::cout << msg << std::endl;
        // Add to the data we will put in the log file.
        data.push_back(msg);
    }

    int debug::write_logs()
    {
        std::string data_str;

        /*
         We get the system time here. This is because we want to name each log
         after what time the log file was made.
         */
        std::time_t result = std::time(nullptr);
        std::string time = std::asctime(std::localtime(&result));

        data_str.append("\n");
        data_str.append(time);

        // Put the contents of the data vector into the string we append to file
        for (std::string str : data)
        {
            data_str.append("\n");
            data_str.append(str);
        }

        log_file.open(time.c_str(), std::ios::app);

        if (log_file.is_open())
        {
            log_file << data_str;
            log_file.close();
        }
        else
        {
            std::cout << "Error: Couldn't write log file!" << std::endl;
            return 1;
        }

        return 0;
    }
}

函数日志似乎没有定义,但我在debug.cpp文件中定义了它。我已经为此工作了几个小时了.有谁可以帮我?

另外,以下是Xcode使用构建程序的命令:

Ld /Users/home/Library/Developer/Xcode/DerivedData/tiled-bhqwfqpsuugzhkagbmrhebnbgnpb/Build/Products/Debug/tiled normal /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk cd /Users/home/Documents/tiled x86_64 MACOSX_DEPLOYMENT_TARGET=10.10 -arch x86_64 -isysroot Ld -L/Users/home/Library/Developer/Xcode/DerivedData/tiled-bhqwfqpsuugzhkagbmrhebnbgnpb/Build/Products/Debug -L/usr/local/lib -F/Users/home/Library/Developer/Xcode/DerivedData/tiled-bhqwfqpsuugzhkagbmrhebnbgnpb/Build/Products/Debug版本/Users/home/Library/Developer/Xcode/DerivedData/tiled-bhqwfqpsuugzhkagbmrhebnbgnpb/Build/Intermediates/tiled.build/Debug/tiled.build/Objects-normal/x86_64/tiled.LinkFileList -mmacosx- -filelist --filelist=10.10 -stdlib=libc++ -lglfw.3.1 -framework OpenGL -Xlinker -dependency_info -Xlinker /Users/home/Library/Developer/Xcode/DerivedData/tiled-bhqwfqpsuugzhkagbmrhebnbgnpb/Build/Intermediates/tiled.build/Debug/tiled.build/Objects-normal/x86_64/tiled_dependency_info.dat -o /Users/home/Library/Developer/Xcode/DerivedData/tiled-bhqwfqpsuugzhkagbmrhebnbgnpb/Build/Products/Debug/tile

EN

回答 1

Stack Overflow用户

发布于 2015-07-25 13:18:30

为了解决这个问题,我去掉了.cpp文件,只制作了那些内联函数。因为这只是一个变通方法,所以我不会选择这个作为答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31621546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档