-
Notifications
You must be signed in to change notification settings - Fork 3k
Closed
Description
Describe the issue
If i use abseil and libtorch together, and use the function like StrAppend, the build will fail and give errors like
undefined reference to `absl::StrCat(absl::AlphaNum const&, absl::AlphaNum const&, absl::AlphaNum const&)'
Steps to reproduce the problem
My Cmakelist is like
cmake_minimum_required(VERSION 3.25)
project(simple_tests)
set(ABSL_PROPAGATE_CXX_STD ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_CXX_STANDARD 17)
set(_GLIBCXX_USE_CXX11_ABI 0)
set(CONDA_PREFIX "/home/qzz/.conda/envs/bridge_research/")
set(PYTHON_EXECUTABLE "${CONDA_PREFIX}/bin/python")
set(PYTHON_INCLUDE_DIR "${CONDA_PREFIX}/include/python3.8")
set(PYTHON_LIBRARIES "${CONDA_PREFIX}/lib/libpython3.so")
set(CMAKE_CUDA_COMPILER "/usr/local/cuda-11.7/bin/nvcc")
set(CMAKE_CUDA_ARCHITECTURES 86)
find_package(PythonInterp REQUIRED)
find_package(PythonLibs REQUIRED)
set(TorchPath /home/qzz/.conda/envs/bridge_research/lib/python3.8/site-packages/torch)
message(STATUS TorchPath=${TorchPath})
list(APPEND CMAKE_PREFIX_PATH ${TorchPath})
find_package(Torch REQUIRED)
set(TORCH_PYTHON_LIBRARIES "${TorchPath}/lib/libtorch_python.so")
add_subdirectory(third_party/abseil-cpp)
add_subdirectory(third_party/pybind11)
add_library(t SHARED absl_simple_tests.h)
target_link_libraries(t PUBLIC
absl::base
absl::algorithm
absl::flags
absl::optional
absl::random_random
absl::strings
absl::str_format
absl::time
${TORCH_LIBRARIES}
)
target_include_directories(t PUBLIC
${TORCH_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
third_party/abseil-cpp
third_party/)
add_executable(simple_tests main.cpp)
target_link_libraries(simple_tests PUBLIC t)
The file absl_simple_tests.h is
#include "absl/strings/str_cat.h"
#ifndef SIMPLE_TESTS_ABSL_SIMPLE_TESTS_H
#define SIMPLE_TESTS_ABSL_SIMPLE_TESTS_H
std::string TestStrCat() {
std::string s1;
s1 = absl::StrCat("A string ", " another string", "yet another string");
return s1;
}
std::string TestStrAppend() {
std::string s = "foo";
absl::StrAppend(&s, "123");
return s;
}
#endif //SIMPLE_TESTS_ABSL_SIMPLE_TESTS_H
The file main.cpp is like
#include <iostream>
#include "absl_simple_tests.h"
#include "torch/torch.h"
int main() {
auto s = TestStrCat();
std::cout << s << std::endl;
s = TestStrAppend();
std::cout << s << std::endl;
std::cout << torch::eye(3) << std::endl;
return 0;
}
If i build this, I will get errors:
/usr/bin/ld: CMakeFiles/simple_tests.dir/main.cpp.o: in function `TestStrCat()':
main.cpp:(.text+0xc3): undefined reference to `absl::StrCat(absl::AlphaNum const&, absl::AlphaNum const&, absl::AlphaNum const&)'
/usr/bin/ld: CMakeFiles/simple_tests.dir/main.cpp.o: in function `TestStrAppend()':
main.cpp:(.text+0x1a4): undefined reference to `absl::StrAppend(std::string*, absl::AlphaNum const&)'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
I have tested libtorch and abseil seperately, they all worked successfully.
The libtorch is just torch2.0.
What version of Abseil are you using?
What operating system and version are you using?
ubuntu22.04
What compiler and version are you using?
gcc 11.3.0
What build system are you using?
cmake 3.25.2
Additional context
No response
Metadata
Metadata
Assignees
Labels
No labels