首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让ChaiScript在Linux和CMake操作系统下运行?

如何让ChaiScript在Linux和CMake操作系统下运行?
EN

Stack Overflow用户
提问于 2019-11-30 09:36:46
回答 1查看 270关注 0票数 0

我正在做一个学生项目,我们希望使用ChaiSript (6.1)作为脚本语言。我们在Linux和Windows上使用CLion和CMake。另外,我们使用的是SFML,所以在Windows7.3.0环境下必须使用minGW 7.3.0进行编译。

我在Linux下创建了一个测试项目(gcc 9.2.0和c++ 17),并得到了以下链接器错误:

代码语言:javascript
复制
/usr/bin/ld: CMakeFiles/ChaiScriptTest.dir/main.cpp.o: in function `chaiscript::detail::Loadable_Module::DLModule::DLModule(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 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<chaiscript::Module> const&, std::unique_ptr<chaiscript::parser::ChaiScript_Parser_Base, std::default_delete<chaiscript::parser::ChaiScript_Parser_Base> >&&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<chaiscript::Options, std::allocator<chaiscript::Options> > 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<std::shared_ptr<chaiscript::Module> (*)()>::DLSym(chaiscript::detail::Loadable_Module::DLModule&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 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<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<std::function<chaiscript::Boxed_Value ()> > >, chaiscript::Boxed_Value>::_Async_state_impl(std::thread::_Invoker<std::tuple<std::function<chaiscript::Boxed_Value ()> > >&&)::{lambda()#1}, , void>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<std::function<chaiscript::Boxed_Value ()> > >, chaiscript::Boxed_Value>::_Async_state_impl(std::thread::_Invoker<std::tuple<std::function<chaiscript::Boxed_Value ()> > >&&)::{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
  • 使用Chaiscript Version 6.0和5.8.3wtih,而非c++14
  • 使用在6.1和5.8.3上编译的没有CMake的clang
  • 和-ld选项集(也有和不带c++17)

f 210

这是我的CMakeLists.txt:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
#include <iostream>
#include "chaiscript/chaiscript.hpp"

int main() {
    chaiscript::ChaiScript chaiScript_;

    chaiScript_.eval("print(\"Hi\");");

    std::cout << "Hello ChaiScript" << std::endl;

    return 0;
}

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-11 10:43:07

不过,我自己解决了问题..。

我查看了文档,发现Jason已经了解到了这一点。

代码语言:javascript
复制
chai.add(chaiscript::fun(std::bind(&MacroEngine::setIgnoredMod, me, std::placeholders::_1)), "setIgnoredMods");

如果将同一行更改为

代码语言:javascript
复制
chai.add(chaiscript::fun(&MacroEngine::setIgnoredMod, &me), "setIgnoredMod");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59114880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档