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

Compiling OpenSpiel as a C++ library fails #1058

Closed
BorisMuller opened this issue Apr 20, 2023 · 5 comments
Closed

Compiling OpenSpiel as a C++ library fails #1058

BorisMuller opened this issue Apr 20, 2023 · 5 comments

Comments

@BorisMuller
Copy link

When following the steps for compiling OpenSpiel as a Shared Library the following command fails:
BUILD_SHARED_LIB=ON CXX=clang++ cmake -DPython3_EXECUTABLE=$(which python3) -DCMAKE_CXX_COMPILER=${CXX} ../open_spiel
The following errors are reported:
CMake Error at CMakeLists.txt:199 (add_subdirectory):
add_subdirectory given source "abseil-cpp" which is not an existing
directory.

Not building wheel. Finding Python normally...
-- Could NOT find Python3 (missing: Development Development.Module Development.Embed) (found version "3.10.9")
Python executable: /home/boris/miniconda3/envs/Othello/bin/python3
Python include dirs: /home/boris/anaconda3/include/python3.9
Python library dirs: /home/boris/anaconda3/lib
OPEN_SPIEL_ENABLE_JAX set to AUTO. Detecting Jax...
Not found. Enable printing errors in python/CMakeLists.txt to see output.
OPEN_SPIEL_ENABLE_PYTORCH set to AUTO. Detecting PyTorch...
Not found. Enable printing errors in python/CMakeLists.txt to see output.
OPEN_SPIEL_ENABLE_TENSORFLOW set to AUTO. Detecting Tensorflow...
Not found. Enable printing errors in python/CMakeLists.txt to see output.
-- Configuring incomplete, errors occurred!
See also "/home/boris/Downloads/open_spiel-1.2/build/CMakeFiles/CMakeOutput.log".
See also "/home/boris/Downloads/open_spiel-1.2/build/CMakeFiles/CMakeError.log".
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_CXX_COMPILER=

CMake Error at games/CMakeLists.txt:201 (add_library):
Cannot find source file:

bridge/double_dummy_solver/include/dll.h

Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm .h
.hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .hip .ispc

CMake Error at games/CMakeLists.txt:201 (add_library):
No SOURCES given to target: bridge_double_dummy_solver

For some weird reason neither "/home/boris/Downloads/open_spiel-1.2/build/CMakeFiles/CMakeOutput.log" nor "/home/boris/Downloads/open_spiel-1.2/build/CMakeFiles/CMakeError.log" exist.

I have tried this on two different devices and neither of them worked.

@lanctot
Copy link
Collaborator

lanctot commented Apr 20, 2023

Hi,

Seems like you are missing the dependencies.

You still need to run ./install.sh from the installation instructions before building.

@BorisMuller
Copy link
Author

BorisMuller commented Apr 24, 2023

Hi,

Seems like you are missing the dependencies.

You still need to run ./install.sh from the installation instructions before building.

Solved!

I did run into another error later on that I managed to solve with the help of Bing Chat.
When running the following command:
cd ../open_spiel/examples
clang++ -I${HOME}/open_spiel -I${HOME}/open_spiel/open_spiel/abseil-cpp -L${HOME}/open_spiel/build -lopen_spiel -std=c++17 -o shared_library_example shared_library_example.cc

I ran into the following error:
/usr/bin/ld: /tmp/ccBICDuM.o: in function main': shared_library_example.cc:(.text+0x232): undefined reference to open_spiel::RegisteredGamesabi:cxx11'
/usr/bin/ld: shared_library_example.cc:(.text+0x374): undefined reference to open_spiel::LoadGame(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /usr/bin/ld: shared_library_example.cc:(.text+0x5d4): undefined reference to open_spiel::SampleAction(std::vector<std::pair<long, double>, std::allocator<std::pair<long, double> > > const&, absl::lts_20211102::BitGenRef)'
/usr/bin/ld: shared_library_example.cc:(.text+0x919): undefined reference to `open_spiel::State::ApplyActions(std::vector<long, std::allocator > const&)'
collect2: error: ld returned 1 exit status

Bing chat told me the -lopen_spiel option should be specified after the object files or source files to ensure that the linker can find the definitions for the functions used in your code. After running the updated command:
g++ -I${HOME}/open_spiel -I${HOME}/open_spiel/open_spiel/abseil-cpp -std=c++17 -o shared_library_example shared_library_example.cc -L${HOME}/open_spiel/build -lopen_spiel
The code worked and I was succesfully able to run the example. Please do note that I used g++ instead of clang++. Do you think you could include running the install.sh step and this updated command in the https://openspiel.readthedocs.io/en/latest/library.html page?

@lanctot
Copy link
Collaborator

lanctot commented Apr 24, 2023

Ok, great. The -lopen_spiel was already in the compilation command on the page here: https://github.com/deepmind/open_spiel/blob/master/docs/library.md#compiling-and-running-the-example

Sure, we will add a mention of installing the dependencies. Thanks!

@BorisMuller
Copy link
Author

The -lopen_spiel is indeed mentioned but I ran into an error when it is in the middle of the command, when moving it to the end of the command it did work. This might be because I am using g++ instead, I am not sure.

@lanctot
Copy link
Collaborator

lanctot commented Apr 24, 2023

Ah, yes, it seems like it is related to g++/gcc: https://stackoverflow.com/questions/3363398/g-linking-order-dependency-when-linking-c-code-to-c-code

I had forgotten about that. So I've re-ordered the order in the example to match yours.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants