2017-01-13 15 views
-1

웹 응용 프로그램에 C++ 라이브러리를 사용할 계획이며 웹 어셈블리가이 용도로 적합하다고 생각됩니다. 나는 컴파일을 위해 emscripten을 사용하고있다. 웹 어셈블리 : C++ 라이브러리와 함께 emscripten 사용

나는이 오픈 소스 C++ 라이브러리의 소스 코드를 가지고 그것이 및 emmake 내가 내 /usr/local/<name of open source>/lib뿐만 아니라 헤더 파일에 .A 라이브러리를 가지고 그 두 통화 후

를 설치 할 수 있도록 emmake 를 사용하여 만든 in 내 /usr/local/<name of open source>/include

또한이 오픈 소스 라이브러리를 사용하는 예제 cpp 코드가 있습니다.

질문 :이 cpp 파일에 대한 html 파일을 어떻게 만듭니 까? 이러한 파일의 이름은이다 "Test.cpp에" 내가이 명령을 시도하지만 "해결되지 않은 기호를"

em++ -I/usr/local/<name of open source>/include -L/usr/local/<name of open source>/lib test.cpp -s WASM=1 -o final.html 

이 많이 그럼 난 내 로컬에서 웹 서버를 실행하는 emrun라는 원인이 있지만, final.html에 내가 예상 한 내용이 표시되지 않았습니다.

도와주세요. 라이브러리가 충족되지 의존성 (미해결의 상징)를 가질 수처럼

unresolved symbol warnings in the console

+0

WebAssembly에만 해당되는 것 같지 않습니다. Emscripten의 정기적 인 asm을 따라갈 수 있습니까?js 명령을 사용하여 동일한 오류가 발생하는지 확인하십시오. 그렇다면이 오류는 무엇입니까? 또한'/ usr/local'을 사용할 수 없습니까? Emscripten에는 자체 C 및 C++ 표준 라이브러리가 있습니다. –

+0

안녕하세요, 저는 표준 라이브러리가 아니기 때문에 개발자가 과학 연구를 위해 집중적으로 계산할 수 있도록 개발 한 오픈 소스 프로젝트를 사용하려고합니다. 또한 Emscripten의 일반적인 asm.js 지침에 따라 시도했지만 작동하지 않는 것 같습니다. –

+0

JF Bastien : "Emscripten에는 자체 C 및 C++ 표준 라이브러리가 있습니다." 이걸 확장 할 수 있을까요? Txx – backspaces

답변

0

는 것 같습니다. emscripten 빌드는 크로스 빌드입니다. 즉, 설치된 시스템 라이브러리를 사용할 수 없습니다. 대신에 emscripten 컴파일러로 모든 종속성을 구축해야합니다. Emscripten은 해결되지 않은 기호가 경고라는 불행한 행동을하지만 (다른 링커는이를 오류로 간주합니다) 프로그램을 가지고있을 경우 프로그램이 작동하지 않을 수 있습니다.

0

경고 (오류, 실제로)는 emscripten을 통해 포함 된 라이브러리의 cpp 파일을 컴파일하지 않았 음을 보여줍니다. test.cpp 파일 외에도 프로젝트에 필요한 모든 파일을 em ++ 명령에 제공해야합니다. 자세한 내용은 here을 참조하십시오.

이제 질문의 다른 부분으로 가면 emscripten은 "노출"하는 C++ 함수에 대해서만 JS 함수를 만듭니다. (분명히 이러한 노출 된 함수에 의해 호출되는 함수도 컴파일되고 나머지는 제거됩니다.) 해결되지 않은

0

Emscripten 취급하지 않습니다 (JS 이벤트에 그들을 결합 예)

이 달성에 작은 튜토리얼은 당신의 기능이 노출되면 here

, 당신은 당신의 자신의 JS 코드에서 호출 찾을 수 있습니다 심볼을 다양한 이유로 컴파일 오류로 처리합니다.

프로젝트를 컴파일 할 때 생성 된 .a 라이브러리도 링크해야합니다. -I-L 옵션은 프로그램과 연결할 라이브러리를 찾을 위치를 지정하지만 연결할 라이브러리를 지정하지 않습니다.

컴파일 명령에 -l<name of your library> 옵션을 추가하여 프로그램과 링크되도록 지정해야합니다.