2014-01-08 2 views
3

C++ 응용 프로그램에서 ffmpeg의 libswresample에 연결하려고합니다. Mac OS X 10.9에서 Homebrew를 통해 ffmpeg를 설치했습니다. 간단한 테스트 애플리케이션은 C로 컴파일되면 링크되지만 C++로 컴파일되지는 않습니다.MacOS X 10.9에서 C++로 ffmpeg의 libswresample 연결하기

#include <stdio.h> 
#include <libswresample/swresample.h> 

int main() 
{ 
    swr_alloc(); 
    printf("Hello world\n"); 
    return 0; 
} 

이 예상대로 프로그램을 작성 clang -I/usr/local/include -L/usr/local/lib -lswresample -o hello hello.c와 C로 컴파일 : 다음 샘플 코드이다. clang++ -I/usr/local/include -L/usr/local/lib -lswresample -o hello hello.cc를 사용하여 C++로 컴파일하는 경우는 다음과 같은 오류가 발생합니다

Undefined symbols for architecture x86_64: 
    "swr_alloc()", referenced from: 
     _main in hello-9jqOY4.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

그러나 nm -a /usr/local/lib/libswresample.dylib을 실행은 000000000000d8a9 T _swr_allocfile /usr/local/lib/libswresample.dylib 내가 예상된다 가정 /usr/local/lib/libswresample.dylib: Mach-O 64-bit dynamically linked shared library x86_64을 보여줍니다 포함되어 있습니다. gcc/g ++로 예제을 컴파일하는 것과 같은 문제가 있습니다. 또한 컴파일 할 때 동일한 문제가 발생합니다. ffmpeg clang 또는 gcc와 연결하면 연결에 대해 알지 못합니다. 그것은 분명해야하지만 C++ 대 C 라이브러리에서 다른 라이브러리를 연결해야한다는 제안을 찾지 못했고 다른 라이브러리 (예 : sox)를 연결하면 동일한 설정을하는 데 어려움이 없습니다.

libstdC++에서 libC++로 변경 되었기 때문에 Mac OS X 10.9에서 링크 문제와 관련된 게시물을 보았지만 -stdlib=libstdc++ 또는 -stdlib=libc++을 추가해도 아무런 효과가없는 것 같습니다. 또한 -mmacosx-version-min=10.6 또는 10.9을 추가해도 아무런 차이가 없습니다.

도움을 주시면 대단히 감사하겠습니다.

답변

5

C 스타일 이름 맹 글링을 사용해야 함을 컴파일러에 알려야합니다.

extern "C" 
{ 
#include <libswresample/swresample.h> 
} 
+0

감사합니다. 나는 그것이 무엇인가 기본적인 것으로 의심했다. 왜 내가 이것을 알아낼 수 없었는지 모르겠다. – user2530102

관련 문제