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

Building with WSL does not work #868

Open
jerylteo opened this issue Sep 17, 2024 · 6 comments
Open

Building with WSL does not work #868

jerylteo opened this issue Sep 17, 2024 · 6 comments

Comments

@jerylteo
Copy link

Running WSL on Windows 11, on BehaviorTree.CPP v4.6.2.

Continuation from #867

Commands to build works without errors, but folder does not reflect built files.
i.e. No difference made after running: cmake --build . --parallel

After running:
...
[ 99%] Built target t12_default_ports
[ 99%] Built target t06_subtree_port_remapping
[100%] Linking CXX executable t11_groot_howto
[100%] Linking CXX executable ex03_sqlite_log
[100%] Built target t11_groot_howto
[100%] Built target ex03_sqlite_log
[100%] Linking CXX executable behaviortree_cpp_test
[100%] Built target behaviortree_cpp_test

But build folder does not contain any lib or dll etc.
image

Did something go wrong? Running with administrative privileges did not make a difference.

@jerylteo
Copy link
Author

Installing with Pixi works but program crashes because "libzmq-mt-4_3_5.dll was not found".

I've literally tried all ways I can think of to build this.

  • Windows (sqlite3.h not found)
  • WSL (build doesn't work)
  • Pixi (libzmq-mt-4_3_5.dll was not found)
  • Tried v4.5.x and v3.8, both does not work either.

Would appreciate some help.

@jerylteo
Copy link
Author

jerylteo commented Sep 18, 2024

Building with OSX replicates the issue.

I think the build works, but there could be some configuration that does not build a dll/lib for non-Windows OS. Unfortunately, I need to add this to a Windows VS Project, so I do need to be able to link the library over.

Looks like I've made one full circle and need to build in Windows, but that doesn't work. #867

@jerylteo
Copy link
Author

Building it directly with VS fails to build the library with zmq and sqlite3 errors:

2>------ Build started: Project: behaviortree_cpp, Configuration: Debug x64 ------
2>Auto build dll exports
2> Creating library C:/Users/jeryl/Documents/GitHub/build2/Debug/behaviortree_cppd.lib and object C:/Users/jeryl/Documents/GitHub/build2/Debug/behaviortree_cppd.exp
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_errno referenced in function "public: __cdecl zmq::error_t::error_t(void)" (??0error_t@zmq@@qeaa@XZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_strerror referenced in function "public: virtual char const * __cdecl zmq::error_t::what(void)const " (?what@error_t@zmq@@UEBAPEBDXZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_ctx_new referenced in function "public: __cdecl zmq::context_t::context_t(void)" (??0context_t@zmq@@qeaa@XZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_ctx_term referenced in function "public: void __cdecl zmq::context_t::close(void)" (?close@context_t@zmq@@QEAAXXZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_msg_init referenced in function "public: __cdecl zmq::message_t::message_t(class zmq::message_t &&)" (??0message_t@zmq@@qeaa@$$QEAV01@@z)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_msg_init_size referenced in function "public: __cdecl zmq::message_t::message_t(void const *,unsigned __int64)" (??0message_t@zmq@@qeaa@PEBX_K@Z)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_msg_send referenced in function "public: class std::optional __cdecl zmq::detail::socket_base::send(class zmq::message_t &,enum zmq::send_flags)" (?send@socket_base@detail@zmq@@qeaa?AV?$optional@_K@std@@AEAVmessage_t@3@W4send_flags@3@@z)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_msg_recv referenced in function "public: class std::optional __cdecl zmq::detail::socket_base::recv(class zmq::message_t &,enum zmq::recv_flags)" (?recv@socket_base@detail@zmq@@qeaa?AV?$optional@_K@std@@AEAVmessage_t@3@W4recv_flags@3@@z)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_msg_close referenced in function "public: __cdecl zmq::message_t::~message_t(void)" (??1message_t@zmq@@qeaa@XZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_msg_data referenced in function "public: void * __cdecl zmq::message_t::data(void)" (?data@message_t@zmq@@QEAAPEAXXZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_msg_size referenced in function "public: unsigned __int64 __cdecl zmq::message_t::size(void)const " (?size@message_t@zmq@@QEBA_KXZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_msg_more referenced in function "public: bool __cdecl zmq::message_t::more(void)const " (?more@message_t@zmq@@QEBA_NXZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_socket referenced in function "public: __cdecl zmq::socket_t::socket_t(class zmq::context_t &,int)" (??0socket_t@zmq@@qeaa@AEAVcontext_t@1@H@Z)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_close referenced in function "public: void __cdecl zmq::socket_t::close(void)" (?close@socket_t@zmq@@QEAAXXZ)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_setsockopt referenced in function "private: void __cdecl zmq::detail::socket_base::set_option(int,void const *,unsigned __int64)" (?set_option@socket_base@detail@zmq@@AEAAXHPEBX_K@Z)
2>groot2_publisher.obj : error LNK2019: unresolved external symbol __imp_zmq_bind referenced in function "public: void __cdecl zmq::detail::socket_base::bind(char const *)" (?bind@socket_base@detail@zmq@@QEAAXPEBD@Z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_close referenced in function "public: bool __cdecl sqlite::Connection::Close(void)" (?Close@Connection@sqlite@@QEAA_NXZ)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_open referenced in function "public: bool __cdecl sqlite::Connection::Open(class std::basic_string<char,struct std::char_traits,class std::allocator > const &)" (?Open@Connection@sqlite@@QEAA_NAEBV?$basic_string@DU?$char_traits@D@std@@v?$allocator@D@2@@std@@@z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_extended_errcode referenced in function "bool __cdecl sqlite::Priv::CheckError(struct sqlite3 *,int)" (?CheckError@Priv@sqlite@@YA_NPEAUsqlite3@@h@Z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_errmsg referenced in function "bool __cdecl sqlite::Priv::CheckError(struct sqlite3 *,int)" (?CheckError@Priv@sqlite@@YA_NPEAUsqlite3@@h@Z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_errstr referenced in function "bool __cdecl sqlite::Priv::CheckError(int)" (?CheckError@Priv@sqlite@@YA_NH@Z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_prepare_v2 referenced in function "public: __cdecl sqlite::Priv::Statement::Statement(class sqlite::Connection &,class std::basic_string<char,struct std::char_traits,class std::allocator > const &)" (??0Statement@Priv@sqlite@@qeaa@AEAVConnection@2@AEBV?$basic_string@DU?$char_traits@D@std@@v?$allocator@D@2@@std@@@z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_bind_int referenced in function "void __cdecl sqlite::Priv::Append(struct sqlite3_stmt *,int,int const &)" (?Append@Priv@sqlite@@YAXPEAUsqlite3_stmt@@HAEBH@Z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_bind_int64 referenced in function "void __cdecl sqlite::Priv::Append(struct sqlite3_stmt *,int,__int64 const &)" (?Append@Priv@sqlite@@YAXPEAUsqlite3_stmt@@HAEB_J@Z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_bind_text referenced in function "void __cdecl sqlite::Priv::Append(struct sqlite3_stmt *,int,class std::basic_string<char,struct std::char_traits,class std::allocator > const &)" (?Append@Priv@sqlite@@YAXPEAUsqlite3_stmt@@HAEBV?$basic_string@DU?$char_traits@D@std@@v?$allocator@D@2@@std@@@z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_step referenced in function "public: bool __cdecl sqlite::Priv::Statement::Advance(void)const " (?Advance@Statement@Priv@sqlite@@QEBA_NXZ)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_column_int referenced in function "public: int __cdecl sqlite::Priv::Statement::Get(int)const " (??$Get@H@Statement@Priv@sqlite@@QEBAHH@Z)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_finalize referenced in function "public: __cdecl sqlite::Priv::Statement::~Statement(void)" (??1Statement@Priv@sqlite@@qeaa@XZ)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_reset referenced in function "public: bool __cdecl sqlite::Priv::Statement::Reset(void)const " (?Reset@Statement@Priv@sqlite@@QEBA_NXZ)
2>bt_sqlite_logger.obj : error LNK2019: unresolved external symbol sqlite3_db_cacheflush referenced in function "public: virtual void __cdecl BT::SqliteLogger::flush(void)" (?flush@SqliteLogger@BT@@UEAAXXZ)
2>C:\Users\jeryl\Documents\GitHub\build2\Debug\behaviortree_cppd.dll : fatal error LNK1120: 30 unresolved externals
2>Done building project "behaviortree_cpp.vcxproj" -- FAILED.

@jerylteo
Copy link
Author

Removing ZMQ and SQLite3 from CMakeList allows the library to build properly.

However, when running a sample program on Debug mode, I get a Read Access Violation error from behaviortree_cppd.dll. Release mode works, but I need to be able to run in Debug mode. This error should be another topic. #869

@tony-p
Copy link
Contributor

tony-p commented Oct 8, 2024

Are you building with ROS2 by any chance? if so I have been adding https://github.com/tony-p/BehaviorTree.CPP/blob/e923c1fc412e2775cf1b5dbeae77cf7fd78525f0/cmake/ament_build.cmake#L7 for the pixi build to work.

Can't remember exactly why I haven't upstreamed it, either it broke the regular build or I thought it was just too hacky

On WSL/Linux with pixi/robostack I ended up manually linking the libraries RoboStack/ros-humble#119

Not sure if this actually still an issue with behaviortree.CPP ZMQ as I believe the libraries are now linked as Public, but definitely had to do that in the past

@tony-p
Copy link
Contributor

tony-p commented Oct 8, 2024

when you run with pixi, are you running it within the pixi environement?

pixi is built for a flavour of a conda virtual environment, so to run you should either use pixi shell to enter the pixi environment, or prefix your execution command with pixi run https://pixi.sh

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