openscenegraph-cross-platform-guide icon indicating copy to clipboard operation
openscenegraph-cross-platform-guide copied to clipboard

Emscripten build error

Open rdroe opened this issue 4 years ago • 15 comments

Thanks for the great tutorials. I've run through a couple with success. However, walking through your Emscripten, I get a build error:

[ 80%] Building CXX object /home/davo/sites/OpenSceneGraph/build/Emscripten/src/osgAnimation/CMakeFiles/osgAnimation.dir/StackedTransform.cpp.o
[ 80%] Building CXX object /home/davo/sites/OpenSceneGraph/build/Emscripten/src/osgUI/CMakeFiles/osgUI.dir/Validator.cpp.o
[ 81%] Linking CXX executable sample-ems.html
shared:ERROR: emcc: cannot find library "nul" (`-s ERROR_ON_MISSING_LIBRARIES=0` to disable this error)
make[2]: *** [CMakeFiles/sample-ems.dir/build.make:100: sample-ems.html] Error 1
make[1]: *** [CMakeFiles/Makefile2:81: CMakeFiles/sample-ems.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 81%] Building CXX object /home/davo/sites/OpenSceneGraph/build/Emscripten/src/osgManipulator/CMakeFiles/osgManipulator.dir/Translate2DDragger.cpp.o
[ 81%] Building CXX object /home/davo/sites/OpenSceneGraph/build/Emscripten/src/osgAnimation/CMakeFiles/osgAnimation.dir/StackedTranslateElement.cpp.o
[ 81%] Building CXX object /home/davo/sites/OpenSceneGraph/build/Emscripten/src/osgWrappers/serializers/osgSim/CMakeFiles/osgdb_serializers_osgsim.dir/DirectionalSector.cpp.o
...
[ 91%] Linking CXX static library ../../../lib/libosgdb_ive.a
[ 91%] Built target osgdb_ive
make: *** [Makefile:130: all] Error 2

I followed the instructions exactly. This is on Ubuntu 19.04 but same on OSX Mojave.

When I had entered emsdk activate latest, some of the output was

Set the following tools as active:
   releases-fastcomp-7b4b328af02eafbc857b8ca1e3d9b12dddc56ef7-64bit
   node-8.9.1-64bit

Thanks again! The tutorials were really helpful for other systems.

rdroe avatar Aug 18 '19 18:08 rdroe

Emscripten got updates since the time of the guide publication. Unfortunately, rarely do developers care about stability, so they change the behavior of software sigh.

To fix the issue, try to update openscenegraph-cross-platform-guide-application/web/CMakeLists.txt by replacing the following line:

SET(USE_SDL2 "-s USE_SDL=2")

with:

SET(USE_SDL2 "-s USE_SDL=2 -s ERROR_ON_MISSING_LIBRARIES=0")

Please, let me know if it works for you: I'll update the guide's code.

kornerr avatar Aug 26 '19 21:08 kornerr

Thanks! This time tomorrow at latest, I'll let you know.

rdroe avatar Aug 27 '19 12:08 rdroe

The suggestion seems to have gotten me past that error. The next, I'm guessing, is something similar. Compiler suggests "ERROR_ON_UNDEFINED_SYMBOLS=0".

I'm getting familiar with CMake, but not exactly sure where to put this.

I believe the issue is documented here where one of Emscripten's major ported libraries encountered it: https://git.sprintf.io/emscripten-ports/emscripten/commit/feb5be841fb973f1ac8e29d853e22e04d1cdab26

Any suggestions welcome; putting it in the CMakeLists.txt in the /web project did not apparently work. I am retrying in a new build directory.

Part of the actual error message:

[ 95%] Building CXX object /Users/robertroe/sites/OpenSceneGraph/build/Emscripten/src/osgWrappers/serializers/osgAnimation/CMakeFiles/osgdb_serializers_osganimation.dir/UpdateMatrixTransform.cpp.o
[ 95%] Building CXX object /Users/robertroe/sites/OpenSceneGraph/build/Emscripten/src/osgWrappers/serializers/osgAnimation/CMakeFiles/osgdb_serializers_osganimation.dir/UpdateMatrixfUniform.cpp.o
error: undefined symbol: pthread_attr_getstacksize
warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0`
error: undefined symbol: pthread_testcancel
Error: Aborting compilation due to previous errors

rdroe avatar Aug 28 '19 13:08 rdroe

@rdroe, try to use

SET(USE_SDL2 "-s USE_SDL=2 -s ERROR_ON_MISSING_LIBRARIES=0 -s ERROR_ON_UNDEFINED_SYMBOLS=0")

Let me know if it works

kornerr avatar Sep 02 '19 10:09 kornerr

@kornerr Seems to work. Seriously, thanks!!! I'm forking the repo to make a PR, in case it's helpful.

rdroe avatar Sep 05 '19 00:09 rdroe

Glad to hear that!

Could you please then rename USE_SDL2 into something like FLAGS in that PR? That would help us keep that variable "flexible".

kornerr avatar Sep 05 '19 10:09 kornerr

I meet the same probelm. but it doesn't work; There is the error. g++.exe: error: USE_SDL=2: No such file or directory g++.exe: error: ERROR_ON_MISSING_LIBRARIES=0: No such file or directory

For-thewin avatar Nov 13 '19 12:11 For-thewin

That definitely worked for Emscripten compilation (I was running on osx and linux). The way to implement is not via command line, but to change the file CMakeLists.txt in the project you're trying to compile.

Also, make sure you're following the g++ project's instructions very closely. The error message looks unrelated to my problem.

If you reach the error I described, see https://github.com/OGStudio/openscenegraph-cross-platform-guide-application/pull/1/files; I'd do something like this, but not in the Emscripten project; rather the same file but in whichever project you're compiling.

@kornerr, I made the update you last requested: https://github.com/OGStudio/openscenegraph-cross-platform-guide-application/pull/1/files seems to work.

rdroe avatar Nov 13 '19 14:11 rdroe

@rdroe, thanks, I'll merge the changes when I have time. Not sure if it's going to be soon enough, though.

kornerr avatar Nov 14 '19 07:11 kornerr

@kornerr no rush for me, thanks

rdroe avatar Nov 14 '19 20:11 rdroe

is this project currently succesfully compilable? i have also tried to make it work and i am facing the same error using the latest emscripten version on ubuntu 18.04. as for the ERROR_ON_MISSING_LIBRARIES, according to documentation it is always on, so it shouldn't make any difference by setting it to zero. I have a question though, is there any possibility to include the osg in Qt for WebAssembly?

I have tried to use the precompiled static libaries from here: https://github.com/MozillaReality/OpenSceneGraph/releases/tag/OpenSceneGraph-3.7.0-wasm+mozilla-gltf but i couldn't successfully build it because a lot of errors related to undefined symbols from OSG. I have also compiled the openscenegraph latest version for emscripten successfully and included it in Qt for Webassembly but i got the same errors.

radu022003 avatar Jun 04 '20 11:06 radu022003

in order to make it work i added the followings in CMakeLists.txt (openscenegraph-cross-platform-guide-application/web), then executed the cmake command, then removed the -lnul inside the generated file inside sample-ems/CMakeFiles/sample-ems.dir/linklibs.rsp, then executed make command

radu022003 avatar Jun 04 '20 15:06 radu022003

in order to make it work i added the followings in CMakeLists.txt (openscenegraph-cross-platform-guide-application/web), then executed the cmake command, then removed the -lnul inside the generated file inside sample-ems/CMakeFiles/sample-ems.dir/linklibs.rsp, then executed make command

So, it now works for you, right?

kornerr avatar Jun 05 '20 10:06 kornerr

Yes, i am able to build and run the application. Here is what i added to CMakeFiles.txt and i forgot to add: SET(FLAGS "-s USE_SDL=2 -s ERROR_ON_UNDEFINED_SYMBOLS=0") SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${FLAGS}" CACHE STRING "Use SDL2" FORCE) Actually I took it from pull request and removed the ERROR_ON_MISSING_LIBRARIES Edit: I have to say that I was able to compile it using emsdk version 1.39.16, with version 1.38.27 (the one that Qt is build with) i still could not successfully build it.

But my aim is to make it work within Qt for Webassembly

radu022003 avatar Jun 05 '20 14:06 radu022003

I'm having a similar issue compiling on MacOS 10.15.5

I get a weird -lnul flag that appears in my linklib.rsp. It can't find the library when building initially, but if I just remove the flag, it compiles successfully. I assume nul is just a missing library name or something similar. Is there a way of preventing such behaviour?

Davidobot avatar Jul 04 '20 08:07 Davidobot