作者:洋索菲命_563 | 来源:互联网 | 2023-09-16 12:00
我正在研究一个学生项目,我们想使用ChaiSript(6.1)作为脚本语言。我们在Linux和Windows上使用CLion和CMake。另外,我们使用的是SFML,因此必须在Windows上使用minGW 7.3.0进行编译。
我在Linux(gcc 9.2.0和c ++ 17)下创建了一个Test-Project,并收到以下链接器错误:
/usr/bin/ld: CMakeFiles/ChaiScriptTest.dir/main.cpp.o: in function `chaiscript::detail::Loadable_Module::DLModule::DLModule(std::__cxx11::basic_string,std::allocator > const&)':
/home/felix/Workspaces/CLion/ChaiScriptTest/ChaiScript-6.1.0/include/chaiscript/language/chaiscript_posix.hpp:19: undefined reference to `dlopen'
/usr/bin/ld: /home/felix/Workspaces/CLion/ChaiScriptTest/ChaiScript-6.1.0/include/chaiscript/language/chaiscript_posix.hpp:23: undefined reference to `dlerror'
/usr/bin/ld: CMakeFiles/ChaiScriptTest.dir/main.cpp.o: in function `chaiscript::detail::Loadable_Module::DLModule::~DLModule()':
/home/felix/Workspaces/CLion/ChaiScriptTest/ChaiScript-6.1.0/include/chaiscript/language/chaiscript_posix.hpp:34: undefined reference to `dlclose'
/usr/bin/ld: CMakeFiles/ChaiScriptTest.dir/main.cpp.o: in function `chaiscript::ChaiScript_Basic::ChaiScript_Basic(std::shared_ptr const&,std::unique_ptr >&&,std::vector >,std::allocator > > >,std::vector > const&)':
/home/felix/Workspaces/CLion/ChaiScriptTest/ChaiScript-6.1.0/include/chaiscript/language/chaiscript_engine.hpp:293: undefined reference to `dladdr'
/usr/bin/ld: CMakeFiles/ChaiScriptTest.dir/main.cpp.o: in function `chaiscript::detail::Loadable_Module::DLSym (*)()>::DLSym(chaiscript::detail::Loadable_Module::DLModule&,std::__cxx11::basic_string > const&)':
/home/felix/Workspaces/CLion/ChaiScriptTest/ChaiScript-6.1.0/include/chaiscript/language/chaiscript_posix.hpp:44: undefined reference to `dlsym'
/usr/bin/ld: /home/felix/Workspaces/CLion/ChaiScriptTest/ChaiScript-6.1.0/include/chaiscript/language/chaiscript_posix.hpp:48: undefined reference to `dlerror'
/usr/bin/ld: CMakeFiles/ChaiScriptTest.dir/main.cpp.o: in function `std::thread::thread > >,chaiscript::Boxed_Value>::_Async_state_impl(std::thread::_Invoker > >&&)::{lambda()#1},void>(std::__future_base::_Async_state_impl > >,chaiscript::Boxed_Value>::_Async_state_impl(std::thread::_Invoker > >&&)::{lambda()#1}&&)':
/usr/include/c++/9.2.0/thread:126: undefined reference to `pthread_create'
collect2: Error: ld returned with value 1
make[3]: *** [CMakeFiles/ChaiScriptTest.dir/build.make:84: ChaiScriptTest] Error 1
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/ChaiScriptTest.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:88: CMakeFiles/ChaiScriptTest.dir/rule] Error 2
make: *** [Makefile:140: ChaiScriptTest] Error 2
所有错误均归因于 chaisript_posix.hpp 和 chaiscript_engine.hpp 中缺少对 dlfcn.h 中的函数的引用。除了最后一个线程类有问题。
那么,我该如何解决? Linux上的编译器无关紧要,但必须与MinGW 7.3.0兼容。
我已经尝试过的东西:
- 使用c ++ 14代替c ++ 17
- 在不使用c ++ 14的情况下使用Chaiscript版本6.0和5.8.3
- 使用c声
- 在设置了 -ld-选项的情况下(不包括c ++ 17)在6.1和5.8.3上不使用CMake进行编译
这是我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(ChaiScriptTest)
set(CMAKE_CXX_STANDARD 17)
include_directories(ChaiScript-6.1.0/include)
add_executable(ChaiScriptTest main.cpp)
和我的main.cpp文件:
#include
#include "chaiscript/chaiscript.hpp"
int main() {
chaiscript::ChaiScript chaiScript_;
chaiScript_.eval("print(\"Hi\");");
std::cout <<"Hello ChaiScript" < return 0;
}
谢谢。
没关系,我自己解决了问题...
我查看了文档,发现杰森·特纳(Jason Turner)已经对此表示敬意。
chai.add(chaiscript::fun(std::bind(&MacroEngine::setIgnoredMod,me,std::placeholders::_1)),"setIgnoredMods");
如果将同一行更改为
chai.add(chaiscript::fun(&MacroEngine::setIgnoredMod,&me),"setIgnoredMod");