我目前正在编写一个我从另一个同学修改过的小型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 ++程序)。
答案 0 :(得分:3)
编译C ++程序时,需要使用g++
*(而不是gcc
),以便程序与正确的库链接。
请注意,您仍然可以使用gcc
,但是您必须自己手动链接所需的库。
答案 1 :(得分:0)
您正在使用c命令编译c ++程序。使用g ++而不是gcc。