使用“string”时C ++链接错误

时间:2013-12-08 07:16:40

标签: c++ macos linker g++ clang

我正在使用C ++开发一个业余爱好的迷你项目,运行二进制文件时出现以下错误。

Undefined symbols for architecture x86_64:
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)", referenced from:
      recv_line(int) in networking.o
ld: symbol(s) not found for architecture x86_64

我有一个文件networking.cpp,它使用了一个“std :: string”实例。我在networking.h里面有以下内容。

#ifndef _NETWORKING_H
#define _NETWORKING_H

#include <iostream>
#include <string>

#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define DELIMITER '\n'

std::string recv_line(int sockfd);
#endif

在networking.cpp里面我只有: -

std::string recv_line(int sockfd) {
return "";
}

我做错了什么?

[编辑]

我正在制作如下文件: -

% cat Makefile
CXX=g++

blah: main networking
    $(CXX) main.o networking.o -o blah -v
main:
    $(CXX) -c main.cpp
networking:
    $(CXX) -c networking.cpp
% make

g ++的版本似乎是: -

% g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

1 个答案:

答案 0 :(得分:4)

您需要将stdc++库链接到您的程序。你可以在这里做。

$(CC) main.o networking.o -o blah -v -lstdc++.

此处显示错误表示libstdc++未与您的计划相关联。

此外,在make文件中,使用$(CC)代替CC