paullouisageneau / datachannel-wasm

C++ WebRTC Data Channels and WebSockets for WebAssembly in browsers
MIT License
148 stars 25 forks source link

Missing rtc* functions during linking #27

Closed kallaballa closed 2 years ago

kallaballa commented 2 years ago

I have built datachannel-wasm according to the README except i added emscripten pthread support. When i try to link like this:

em++ -s USE_PTHREADS=1 -pthread -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -L../third/datachannel-wasm/build/ -s INITIAL_MEMORY=419430400 -s TOTAL_STACK=52428800 -s WASM_BIGINT -s "EXPORTED_FUNCTIONS=['_load_image', '_main' ]" -s EXPORTED_RUNTIME_METHODS='["ccall"]' -s FORCE_FILESYSTEM=1 -s STB_IMAGE=1 -s USE_SDL_IMAGE=1 -s USE_SDL_TTF=1 -s USE_LIBPNG=1 -s ERROR_ON_UNDEFINED_SYMBOLS=0 -s STACK_OVERFLOW_CHECK=0 -s ASSERTIONS=0 -s SAFE_HEAP=0 --closure 1-o some.js some1.o some1.o -lm `pkg-config --libs sdl` -ldatachannel-wasm -lwebsocket.js

I get the following errors: warning: undefined symbol: rtcAddRemoteCandidate (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcCreateDataChannel (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcCreatePeerConnection (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcDeleteDataChannel (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcDeletePeerConnection (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcGetBufferedAmount (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcGetDataChannelLabel (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSendMessage (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetBufferedAmountLowCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetBufferedAmountLowThreshold (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetDataChannelCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetErrorCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetGatheringStateChangeCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetLocalCandidateCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetLocalDescriptionCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetMessageCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetOpenCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetRemoteDescription (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetSignalingStateChangeCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetStateChangeCallback (referenced by top-level compiled C/C++ code) warning: undefined symbol: rtcSetUserPointer (referenced by top-level compiled C/C++ code)

What am i doing wrong?

kallaballa commented 2 years ago

btw. websocket code links just fine.

kallaballa commented 2 years ago

I figured it out. I had to add --js-library ../third/datachannel-wasm/wasm/js/webrtc.js

paullouisageneau commented 2 years ago

Indeed, you have to link the Javascript libraries, like in CMakeLists.txt. You may also get away with -lwebrtc.js, just like you did -lwebsocket.js.

kallaballa commented 2 years ago

just -lwebrtc.js doesn't work. thanks anyway!

paullouisageneau commented 2 years ago

I'm closing this since it seems to be solved!