ld:编译c ++时未找到架构x86_64的符号

时间:2014-11-24 11:11:47

标签: c++

我目前正在编写一个我从另一个同学修改过的小型C ++程序(允许进行分配),但我无法编译代码。

#include <chrono>
#include <vector>
#include <fstream>
#include <string>
#include <sstream>
#include <iostream>
#include <map>
#include <utility>
#include <algorithm>

using std::vector;
using std::string;
using std::map;
using std::cout;

int main (int argc, char const *argv[]) {
    int bufferSize = 100;

    auto start = std::chrono::high_resolution_clock::now();

    auto edit = string(argv[1]);
    auto source = string(argv[2]);

    std::ifstream input(source);
    char buffer[bufferSize];
    input.rdbuf()->pubsetbuf(buffer, bufferSize);
    vector<string> remove;

    string line;
    while (std::getline(input, line)) {
        std::stringstream ss(line);
        string item;

        while (std::getline(ss, item, ',')) {
            remove.push_back(item);
        }
    }

    map<string, string> findReplace;
    for (auto value : remove) {
        findReplace.insert(std::pair<string, string>(value, ""));
    }

    vector<string> fileContent;

    std::ifstream input2(edit);
    char buffer2[bufferSize];
    input2.rdbuf()->pubsetbuf(buffer2, bufferSize);

    string line2;
    while(std::getline(input2, line2)) {
        fileContent.push_back(line2);
    }

    for (auto pair : findReplace) {
        std::for_each(fileContent.begin(), fileContent.end(), [&pair] (string &substrate) {
            std::size_t startPos = 0;
            std::size_t matchPos;
            string first = pair.first;
            string second = pair.second;
            while ((matchPos = substrate.find(first, startPos)) != string::npos) {
                substrate.replace(matchPos, first.length(), second);
                startPos = matchPos + first.length();
            }
        });
    }

    std::ofstream output(edit);
    for (auto portion : fileContent) {
        output << portion << std::endl;
    }

    auto end = std::chrono::high_resolution_clock::now();

    std::cout << "Time elapsed: "
    << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count()
    << "ms";
}

每次我使用...

编译(OS X 10.10)
gcc -std=c++11 delete.cpp

我收到了

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

仍然在这里搜索和谷歌,但如果有人能看到这个的原因,我会非常感激你。 (这是我的第一个C ++程序)。

2 个答案:

答案 0 :(得分:3)

编译C ++程序时,需要使用g++ *(而不是gcc),以便程序与正确的库链接。

请注意,您仍然可以使用gcc,但是您必须自己手动链接所需的库。

答案 1 :(得分:0)

您正在使用c命令编译c ++程序。使用g ++而不是gcc。