이 오류는 무엇이고 어떻게 해결해야 합니까?

Seven..의 이미지

숙제를 위해 학교에서 제공해주는 cpp파일을 받았습니다.

그리고 gcc를 이용해서 이렇게...

gcc -o server server.cpp

/tmp/cc25Ea6J.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' 
collect2: ld returned 1 exit status 

허걱.. 이런! 무슨말인지 모르겠더군요 ㅠ.,ㅜ
여기저기 찾아봤는데도 모르겠어서 이렇게 질문 드립니다.

아래는 받은 파일입니다.

/*
	The server process
*/
#define _GNU_SOURCE

#include "local.h"

int main() {
	int				n, done, dummyfifo, publicfifo, privatefifo;
	struct message	msg;
	FILE			*fin;
	static char		buffer[PIPE_BUF];

	mknod(PUBLIC, S_IFIFO | 0666, 0);

	if((publicfifo = open(PUBLIC, O_RDONLY)) == -1 || (dummyfifo = open(PUBLIC, O_WRONLY | O_NDELAY)) == -1) {
			perror(PUBLIC);
			return 1;
	}

	while(read(publicfifo, (char *)&msg, sizeof(msg)) > 0) {
		n = done = 0;
		do {
			if((privatefifo = open(msg.fifo_name, O_WRONLY | O_NDELAY)) == -1)
				sleep(3);
			else {
				fin = popen(msg.cmd_line, "r");
				write(privatefifo, "\n", 1);
				while((n = read(fileno(fin), buffer, PIPE_BUF)) > 0) {
					write(privatefifo, buffer, n);
					memset(buffer, 0x0, PIPE_BUF);
				}
				pclose(fin);
				close(privatefifo);
				done = 1;
			}
		} while(++n < 5 && !done);
		if(!done) {
			write(fileno(stderr),
				"\nNOTE: SERVER ** ENTER ** accessed private FIFO\n", 48);
			return 2;
		}
	}
	return 0;
}
McKabi의 이미지

컴파일은 잘 됐는데, 실행 파일을 만들 때 필요한 라이브러리가 없다는 소리입니다.

gcc에 '-l라이브러리이름' 옵션을 주세요.

ㄲ ㅏ ㅂ ㅣ / M c K a b i / 7 7 r b i / T o D y

winchild의 이미지

컴파일을 해볼려구 했더니 헤더파일이 없군요.
CPP 용 라이브러리들이 설치가 안된듯 합니다.
gcc 는 C++ 컴파일러지만 설치시 옵션에 따라 해당라이브러리가
설치되지 않았거나 접근 불가능인 상태이거나 그럴것 입니다.

- 겨울아찌 -

- 겨울아찌 -
winchild@gmail.com

Prentice의 이미지

cpp파일을 컴파일하신다면, g++을 쓰셔야 합니다.

gcc말고 g++을 써보세요.

McKabi의 이미지

검은해 wrote:
cpp파일을 컴파일하신다면, g++을 쓰셔야 합니다.
gcc말고 g++을 써보세요.

gcc가 g++을 부릅니다. 이 문제하곤 관련이 없지요.

ㄲ ㅏ ㅂ ㅣ / M c K a b i / 7 7 r b i / T o D y

progcom의 이미지

까비 wrote:
gcc가 g++을 부릅니다. 이 문제하곤 관련이 없지요.

최근 버전에서만 그런지는 모르겠지만, gcc로는 C++ 파일은 제대로 링크가 되지 않더군요. g++로 하면 잘 되고요. 오류 증상도 비슷합니다. gcc쪽 스펙에 변경이 있는걸지도 모르겠군요.

g++로 시도해보세요. :)

Seven..의 이미지

g++은 설치가 안되요... ㄱ
여러번 해볼려고 했는데;; 잘 안되더군요
libstdc5.0-3.3.3이 필요하다고 하는데
그게 안찾아지기도 하고

이하 헤더 파일입니다. 꼭좀 도와주세요 ㅠ.,ㅜ
이것때문에 일주일동안 미쳐가고 있는중 :roll:

local.h
/*
	local header file for pipe client-server
*/

#include <cstdio>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <linux/limits.h>
#include <stdlib.h>

using namespace std;

const char *PUBLIC = "/tmp/PUBLIC";
const int B_SIZ = (PIPE_BUF / 2);

struct message {
	char fifo_name[B_SIZ];
	char cmd_line[B_SIZ];
};

제가 리눅스가 쌩초보라.. ㅠ.,ㅜ
라이브러리를 추가한다거나 해야한다면
어디서 받아서 어디에 깔아줘야 할까요?

VENI VIDI VICI

Prentice의 이미지

처음 인용해주셨던 코드는 C++이므로 g++이 설치가 안되어 있으면 어차피 사용을 못하실 겁니다.

g++이 설치 안되어있다면, 어떻게든 설치하시는 일이 급선무이겠습니다. g++ 설치시도를 하실 때 정확히 어떻게 하셨는지, 어떤 에러가 뜨는지를 설치 및 활용 QnA에 올려보세요.. ^_^;

singlet의 이미지

g++ -o server server.cpp

또는

gcc -o server server.cpp -lstdc++

양쪽 다 안 된다면, 별 도리가 없습니다. g++ 새로 설치하시는 수밖에요. (하지만 컴파일 에러가 아니라 링크 에러가 나는 걸 봐서는 아마 될 거라고 생각합니다)

맹고이의 이미지

조금만 고치면 gcc로 돌아가지 않을까요...?

별로 C++같지는 않아보이는데... ^^;

gizrak의 이미지

두가지 문제 중 하나라고 봅니다....

첫째로... 혹시 헤더파일은 다른 폴더에 저장하신건 아닌지?

제가 보기엔 간단한 문제 같은데요? gcc로도 컴파일이 될 것 같은데...

만약 현재 폴더(cpp가 있는 폴더)가 cur이고 헤더파일이 있는 폴더가 hdr이면...

현재 폴더에서 다음과 같이 입력해야 합니다.

# gcc -o server server.cpp -Ihdr

-I 뒤에 폴더명을 써줘야 합니다.

두번째... 라이브러리 위치 지정 문제입니다.

위에 분들이 써주신대로 -l 옵션은 /lib, /usr/lib, /usr/local/lib과 같은 정해진 장소에서만 라이브러리를 찾게 되어 있습니다.

그래서 만약 현재 디렉토리에 라이브러리를 두셨다면 -L옵션을 쓰셔야 합니다.

# gcc -o server server.cpp -lstdc -L.

위에 붙여준 -L 다음에 .이 현재 디렉토리 입니다.

먼저분이 말씀하신대로 컴파일 에러가 아닌 링크 에러이기 때문에 다시 깔 필요는 없다고 봅니다.

void main(void)
{
char *brain;
brain = malloc(sizeof(stress));

free(brain);
}
뭐든지 답은 간단한데서 시작한다.

cdpark의 이미지

g++을 설치하지 않았다면 libg++도 설치가 안 되어 있을텐데요? -_-;;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.