链接器错误:ld:未找到架构x86_64的符号

时间:2015-11-19 00:26:47

标签: c++ linker linker-errors

我正在尝试使用Mac上的终端编译以下代码。代码是用Sublime Text编写的。

#include <iostream>
#include <fstream>
#include <vector> 
#include <unordered_map>
#include <iomanip>
#include <cmath>
#include <string> 
#include <locale> 
#include <cstdlib>

using namespace std;

void parse(string s, vector<string> q);

int main(int argc, char* argv[])
{

    cout << argv[1] << endl;
    cout << argv[2] << endl;
    cout << argv[3] << endl;
    cout << argv[4] << endl;

    int h = stoi(argv[1]);
    int k, c;
    string query;
    vector<string> query_words;
    if(!strcmp(argv[2], "-k"))
    {
        k = stod(argv[3]);
    }

    if(!strcmp(argv[2], "-c"))
    {
        c = stod(argv[3]);
    }


    query = argv[4];
    parse(query, query_words);

    return 0;
}


void parse(string s, vector<string> &q)
{

    string x;
    for(size_t i = 0; i < s.length(); i++)
    {
        string temp;
        if(s[i] == '_')
        {
            s[i] = ' ';
        }

        if(!isalnum(s[i]) && s[i] != ' ')
        {
            temp = s.substr(i+1, s.length() - i-1); 
            x = s.substr(0, i) +  temp;
            s = x;
            i--;
        }
    }

    int start_subString = 0;
    for(size_t i = 0; i < s.length(); i++)
    {
        if(s[i] == ' ')
        {
            string temp = s.substr(start_subString, i - start_subString);
            start_subString = i+1;
            q.push_back(temp);

        }

        if(i+1 == s.length())
        {
            string temp = s.substr(start_subString, i + 1 - start_subString);
            q.push_back(temp);

        }
    }


}

我尝试使用以下行编译:

g++ -std=c++11 hits.cpp -o hits

,这会导致以下错误:

Undefined symbols for architecture x86_64:
  "parse(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >)", referenced from:
      _main in hits-d8b25c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

1 个答案:

答案 0 :(得分:0)

你声明:

void parse(string s, vector<string> q);

所以,这就是所谓的。不幸的是,你定义:

void parse(string s, vector<string> &q)

这不是同一个功能,这就是链接器无法找到它正在寻找的功能的原因 - 你还没有定义它。最有可能的是,你只需要修改声明。