Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compile failure, possibly glibc related. #55

Closed
FrostKnight opened this issue Apr 15, 2024 · 24 comments
Closed

Compile failure, possibly glibc related. #55

FrostKnight opened this issue Apr 15, 2024 · 24 comments
Assignees
Labels
bug Something isn't working

Comments

@FrostKnight
Copy link

Jazz² Resurrection version

2.6.1

System information

Linux Hyperbola 0.4.4 Intel® HD Graphics 4000

Issue description

After the make part, it fails at 100% like the below:

/usr/bin/ld: _deps/ncine_libraries-src/Linux/x86_64/libopenmpt.so: undefined reference to std::__throw_bad_array_new_length()@GLIBCXX_3.4.29' /usr/bin/ld: _deps/ncine_libraries-src/Linux/x86_64/libopenmpt.so: undefined reference to __libc_single_threaded@GLIBC_2.32'
/usr/bin/ld: _deps/ncine_libraries-src/Linux/x86_64/libopenmpt.so: undefined reference to std::to_chars(char*, char*, double)@GLIBCXX_3.4.29' /usr/bin/ld: _deps/ncine_libraries-src/Linux/x86_64/libopenmpt.so: undefined reference to std::__glibcxx_assert_fail(char const*, int, char const*, char const*)@GLIBCXX_3.4.30'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/jazz2.dir/build.make:4688: jazz2] Error 1
make[1]: *** [CMakeFiles/Makefile2:100: CMakeFiles/jazz2.dir/all] Error 2
make: *** [Makefile:156: all] Error 2

Steps to reproduce

attempted compiling after,

mkdir build in the main folder, cd build, cmake .. CMAKE_SYSTEM_PREFIX_PATH=/usr

then make

at 100% it fails for some reason. No idea why. Maybe glibc related? Sorry, would build from earlier release probably but you have no archives.

I will say, I look forward to online mode.

@FrostKnight FrostKnight added the bug Something isn't working label Apr 15, 2024
@deathkiller deathkiller self-assigned this Apr 16, 2024
@deathkiller
Copy link
Owner

The game automatically uses bundled library version if the library (package) is not installed in OS. Because Linux (unlike Windows) is so scattered, the bundled libraries can be sometimes incompatible with OS and other libraries.

You have to install system package for libopenmpt library (or somehow get a compatible version of it for your OS).

@FrostKnight
Copy link
Author

FrostKnight commented Apr 16, 2024

The game automatically uses bundled library version if the library (package) is not installed in OS. Because Linux (unlike Windows) is so scattered, the bundled libraries can be sometimes incompatible with OS and other libraries.

You have to install system package for libopenmpt library (or somehow get a compatible version of it for your OS).

odd thing is, even after installing that it still is failing. Perhaps my version is too old?

I wonder what libopenmpt version I need.

@deathkiller
Copy link
Owner

libopenmpt version usually doesn't matter, because the game uses only old API which is in any version.
Check CMake log, you should see which libopenmpt library was used for build.

@FrostKnight
Copy link
Author

FrostKnight commented Apr 16, 2024

libopenmpt version usually doesn't matter, because the game uses only old API which is in any version. Check CMake log, you should see which libopenmpt library was used for build. That is mine I mean.

Ahh okay. Well its version 0.5.12 supposedly of libopenmpt

CMAKE version is 3.15 if that helps.

More info from log:

Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
Change Dir: /home/luser/jazz2-native/build/CMakeFiles/CMakeScratch/TryCompile-fccvUF

Run Build Command(s):/usr/bin/make -f Makefile cmTC_d654f/fast && /usr/bin/make -f CMakeFiles/cmTC_d654f.dir/build.make CMakeFiles/cmTC_d654f.dir/build
make[1]: Entering directory '/home/user/jazz2-native/build/CMakeFiles/CMakeScratch/TryCompile-fccvUF'
Building C object CMakeFiles/cmTC_d654f.dir/src.c.o
/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_d654f.dir/src.c.o -c /home/luser/jazz2-native/build/CMakeFiles/CMakeScratch/TryCompile-fccvUF/src.c
Linking C executable cmTC_d654f
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d654f.dir/link.txt --verbose=1
/usr/bin/cc CMakeFiles/cmTC_d654f.dir/src.c.o -o cmTC_d654f
/usr/bin/ld: CMakeFiles/cmTC_d654f.dir/src.c.o: in function main': src.c:(.text+0x2d): undefined reference to pthread_create'
/usr/bin/ld: src.c:(.text+0x39): undefined reference to pthread_detach' /usr/bin/ld: src.c:(.text+0x45): undefined reference to pthread_cancel'
/usr/bin/ld: src.c:(.text+0x56): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_d654f.dir/build.make:99: cmTC_d654f] Error 1
make[1]: Leaving directory '/home/user/jazz2-native/build/CMakeFiles/CMakeScratch/TryCompile-fccvUF'
make: *** [Makefile:127: cmTC_d654f/fast] Error 2

Source file was:
#include <pthread.h>

static void* test_func(void* data)
{
return data;
}

int main(void)
{
pthread_t thread;
pthread_create(&thread, NULL, test_func, NULL);
pthread_detach(thread);
pthread_cancel(thread);
pthread_join(thread, NULL);
pthread_atfork(NULL, NULL, NULL);
pthread_exit(NULL);

return 0;
}

Determining if the function pthread_create exists in the pthreads failed with the following output:
Change Dir: /home/user/jazz2-native/build/CMakeFiles/CMakeScratch/TryCompile-n91S3E

Run Build Command(s):/usr/bin/make -f Makefile cmTC_07661/fast && /usr/bin/make -f CMakeFiles/cmTC_07661.dir/build.make CMakeFiles/cmTC_07661.dir/build
make[1]: Entering directory '/home/user/jazz2-native/build/CMakeFiles/CMakeScratch/TryCompile-n91S3E'
Building C object CMakeFiles/cmTC_07661.dir/CheckFunctionExists.c.o
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -o CMakeFiles/cmTC_07661.dir/CheckFunctionExists.c.o -c /home/user/jazz2-native/build/CMakeFiles/CMakeScratch/TryCompile-n91S3E/CheckFunctionExists.c
Linking C executable cmTC_07661
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_07661.dir/link.txt --verbose=1
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create CMakeFiles/cmTC_07661.dir/CheckFunctionExists.c.o -o cmTC_07661 -lpthreads
/usr/bin/ld: cannot find -lpthreads
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_07661.dir/build.make:99: cmTC_07661] Error 1
make[1]: Leaving directory '/home/user/jazz2-native/build/CMakeFiles/CMakeScratch/TryCompile-n91S3E'
make: *** [Makefile:127: cmTC_07661/fast] Error 2

@FrostKnight
Copy link
Author

CMakeError.log

@deathkiller
Copy link
Owner

I meant the CMake output usually written to terminal, it should look like this:

-- The CXX compiler identification is GNU 11.4.0
-- The C compiler identification is GNU 11.4.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Compiling for architecture: x86_64
-- Content directory: /home/runner/work/jazz2-native/jazz2-native/Content
-- Found Git: /usr/bin/git (found version "2.43.2")
-- Game version: 2.6.r663-c69758b
-- Downloading dependencies from "https://github.com/deathkiller/jazz2-libraries/archive/2.6.1.tar.gz"...
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11")
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so
-- Found GLFW: /home/runner/work/jazz2-native/jazz2-native/_build/_deps/ncine_libraries-src/Linux/x86_64/libglfw.so
-- Found SDL2: /home/runner/work/jazz2-native/jazz2-native/_build/_deps/ncine_libraries-src/Linux/x86_64/libSDL2main.a;/home/runner/work/jazz2-native/jazz2-native/_build/_deps/ncine_libraries-src/Linux/x86_64/libSDL2.so
-- Found OpenAL: /home/runner/work/jazz2-native/jazz2-native/_build/_deps/ncine_libraries-src/Linux/x86_64/libopenal.so
-- Found Vorbis: /usr/lib/x86_64-linux-gnu/libogg.so
-- Found libopenmpt: /usr/lib/x86_64-linux-gnu/libopenmpt.so
-- Using GLFW as the preferred backend
-- Using GNU IFUNC for CPU-dependent functionality

And Found libopenmpt should point to your system library. You can also try to delete your build output directory to reset all cached paths.

@FrostKnight
Copy link
Author

I meant the CMake output usually written to terminal, it should look like this:

-- The CXX compiler identification is GNU 11.4.0
-- The C compiler identification is GNU 11.4.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Compiling for architecture: x86_64
-- Content directory: /home/runner/work/jazz2-native/jazz2-native/Content
-- Found Git: /usr/bin/git (found version "2.43.2")
-- Game version: 2.6.r663-c69758b
-- Downloading dependencies from "https://github.com/deathkiller/jazz2-libraries/archive/2.6.1.tar.gz"...
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11")
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so
-- Found GLFW: /home/runner/work/jazz2-native/jazz2-native/_build/_deps/ncine_libraries-src/Linux/x86_64/libglfw.so
-- Found SDL2: /home/runner/work/jazz2-native/jazz2-native/_build/_deps/ncine_libraries-src/Linux/x86_64/libSDL2main.a;/home/runner/work/jazz2-native/jazz2-native/_build/_deps/ncine_libraries-src/Linux/x86_64/libSDL2.so
-- Found OpenAL: /home/runner/work/jazz2-native/jazz2-native/_build/_deps/ncine_libraries-src/Linux/x86_64/libopenal.so
-- Found Vorbis: /usr/lib/x86_64-linux-gnu/libogg.so
-- Found libopenmpt: /usr/lib/x86_64-linux-gnu/libopenmpt.so
-- Using GLFW as the preferred backend
-- Using GNU IFUNC for CPU-dependent functionality

And Found libopenmpt should point to your system library. You can also try to delete your build output directory to reset all cached paths.

I'll rebuild it just to be safe. Maybe doing cmake again will fix it if I do ir from scratch.

@FrostKnight
Copy link
Author

output.txt
You mean like that?

@deathkiller
Copy link
Owner

No, this is build output, but CMake has another output. You should see the same as I shown you 2 messages above.

@FrostKnight
Copy link
Author

FrostKnight commented Apr 16, 2024

No, this is build output, but CMake has another output. You should see the same as I shown you 2 messages above.

Oh sorry, I am a bit confused which file? OH... I get it now my bad.

@FrostKnight
Copy link
Author

FrostKnight commented Apr 16, 2024

cmakeerror.txt
You mean this? If not, tell me specifically.

Or possibly this?

-- Compiling for architecture: x86_64
-- Content directory: /home/auser/jazz2-native/Content
-- Specified custom GIT path: /usr/bin/git
-- Game version: 2.6.r663-c69758b
-- Downloading dependencies from "https://github.com/deathkiller/jazz2-libraries/archive/2.6.1.tar.gz"...
-- Could NOT find libdwarf (missing: LIBDWARF_LIBRARY LIBDWARF_INCLUDE_DIR)
-- Using GLFW as the preferred backend
-- Using GNU IFUNC for CPU-dependent functionality
-- Runtime event tracing is enabled
-- Exporting shader files to C strings
-- Configuring done
-- Generating done
-- Build files have been written to: /home/auser/jazz2-native/build

@deathkiller
Copy link
Owner

Yes, the last one, but it's too short. Try to delete everything, redownload it and rerun it, so everything is recreated.

@FrostKnight
Copy link
Author

FrostKnight commented Apr 16, 2024

-- The CXX compiler identification is GNU 8.4.0
-- The C compiler identification is GNU 8.4.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Compiling for architecture: x86_64
-- Content directory: /home/someuser/jazz2-native/Content
-- Found Git: /usr/bin/git (found version "2.28.0")
-- Game version: 2.6.r663-c69758b
-- Downloading dependencies from "https://github.com/deathkiller/jazz2-libraries/archive/2.6.1.tar.gz"...
-- Found libdw: /usr/lib/libdw.so
-- Found libbfd: /usr/lib/libbfd.so
-- Could NOT find libdwarf (missing: LIBDWARF_LIBRARY LIBDWARF_INCLUDE_DIR)
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found ZLIB: /usr/lib/libz.so (found version "1.2.11")
-- Found GLEW: /usr/lib/libGLEW.so (found version "2.1.0")
-- Found OpenGL: /usr/lib/libGL.so
-- Found GLFW: /usr/lib/libglfw.so
-- Found SDL2: /usr/lib/libSDL2main.a;/usr/lib/libSDL2.so;-lpthread
-- Found OpenAL: /usr/lib/libopenal.so
-- Found Vorbis: /usr/lib/libogg.so
-- Found libopenmpt: /usr/lib/libopenmpt.so
-- Using GLFW as the preferred backend
-- Using GNU IFUNC for CPU-dependent functionality
-- Runtime event tracing is enabled
-- Exporting shader files to C strings
-- Configuring done
-- Generating done
-- Build files have been written to: /home/someuser/jazz2-native/build

@deathkiller
Copy link
Owner

It looks fine. It doesn't build now?

@FrostKnight
Copy link
Author

It looks fine. It doesn't build now?

Yeah... I dunno why.

@FrostKnight
Copy link
Author

FrostKnight commented Apr 16, 2024

I have the dependencies here: https://aur.archlinux.org/packaes/jazz2-bin

Also, but I wondered if there are any hidden ones I am unaware of

EDIT: No it was 2.1 the last version I used.

I wonder... maybe I should try building from older snapshots see what the newest one that works is.

Btw, I think I remember how to backtrack to a specific commit, but I am not sure if I remember. just a heads up.

@FrostKnight
Copy link
Author

FrostKnight commented Apr 16, 2024

EDIT again, this is a mystery to me, I don't know what I did.

I thought I backtracked it to 2.6, but when I look closer, I had tried to push it back to 2.5 with a98af96

But when I look closer, it says r663*c697586 when I boot jazz2 up and the menu appears.

@deathkiller
Copy link
Owner

I did so many changes between 2.5.0 and master, so it's hard to tell what's different and why it doesn't work for you now. Probably the only way is to find last working commit.

@deathkiller
Copy link
Owner

Added NCINE_COMPILE_OPENMPT CMake option to compile libopenmpt from sources instead of using library. It's not tested, but can help with this issue.

@FrostKnight
Copy link
Author

FrostKnight commented Apr 24, 2024

I am erasing what I originally wrote, because I realize that my error is a prefix one.

I think that is what keeps getting in my way.

I want to be able to change prefix to /usr

but when I try using cmake commands it very obnoxiously ignores it mostly.

Not sure why, but anywho, you have done fine.

@deathkiller
Copy link
Owner

Why do you want to changed the prefix?

You should be able to configure and build it like this:

cmake -B output_dir -D CMAKE_BUILD_TYPE=Release -D NCINE_WITH_GLEW=OFF -D NCINE_COMPILE_OPENMPT=OFF
make -C output_dir

@FrostKnight
Copy link
Author

I change the prefix more because that's usually how I do it in Hyperbola.

/usr is where stuff goes not /ust/local

That's how I have been doing it more than anything.

So you are saying I need to do this in cmake and make for it to work though? Is this correct?

@deathkiller
Copy link
Owner

Yeah, I don't know anything about Hyperbola, but the game builds just fine in Fedora and Ubuntu.

@deathkiller
Copy link
Owner

Closing due to inactivity. Feel free to re-open if needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants