blueloveTH 2 лет назад
Родитель
Сommit
d64d955fb8
4 измененных файлов с 28 добавлено и 10 удалено
  1. 0 4
      .github/workflows/main.yml
  2. 11 3
      CMakeLists.txt
  3. 2 2
      include/pocketpy/memory.h
  4. 15 1
      src2/main.cpp

+ 0 - 4
.github/workflows/main.yml

@@ -14,8 +14,6 @@ jobs:
         cd build
         cmake ..
         cmake --build . --config Release
-        cmake .. -DPK_BUILD_SHARED_LIB=1
-        cmake --build . --config Release
         cp Release/pocketpy.exe ../output/windows/x86_64
         cp Release/pocketpy.dll ../output/windows/x86_64
         cp Release/pocketpy.exe ../
@@ -53,8 +51,6 @@ jobs:
         cd build
         cmake ..
         cmake --build . --config Release
-        cmake .. -DPK_BUILD_SHARED_LIB=1
-        cmake --build . --config Release
         cp pocketpy ../output/linux/x86_64
         cp libpocketpy.so ../output/linux/x86_64
         cp pocketpy ../

+ 11 - 3
CMakeLists.txt

@@ -20,7 +20,7 @@ endif()
 if(MSVC)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR- /EHsc /utf-8 /O2")
 else()
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fexceptions -O2 -ldl")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fexceptions -O2")
 endif()
 
 option(PK_EXPORT_C_API "Export C API" ON)
@@ -40,10 +40,18 @@ aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src POCKETPY_SRC)
 option(PK_BUILD_SHARED_LIB "Build shared library" OFF)
 option(PK_BUILD_STATIC_LIB "Build static library" OFF)
 
+set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+
 if(PK_BUILD_SHARED_LIB)
     add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC} ${PK_LIB_CPP})
 elseif(PK_BUILD_STATIC_LIB)
     add_library(${PROJECT_NAME} STATIC ${POCKETPY_SRC} ${PK_LIB_CPP})
 else()
-    add_executable(${PROJECT_NAME} ${POCKETPY_SRC} src2/main.cpp)
-endif()
+    add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC} ${PK_LIB_CPP})
+    add_executable(${PROJECT_NAME}_EXE src2/main.cpp)
+    set_target_properties(${PROJECT_NAME}_EXE PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
+    target_link_libraries(${PROJECT_NAME}_EXE ${PROJECT_NAME})
+    target_link_libraries(${PROJECT_NAME}_EXE ${CMAKE_DL_LIBS})
+endif()
+
+target_link_libraries(${PROJECT_NAME} ${CMAKE_DL_LIBS})

+ 2 - 2
include/pocketpy/memory.h

@@ -246,8 +246,8 @@ struct MemoryPool{
     }
 };
 
-inline MemoryPool<64> pool64;
-inline MemoryPool<128> pool128;
+PK_EXPORT inline MemoryPool<64> pool64;
+PK_EXPORT inline MemoryPool<128> pool128;
 
 template <typename T>
 struct shared_ptr {

+ 15 - 1
src2/main.cpp

@@ -7,9 +7,23 @@ std::string f_input(){
     return pkpy::platform_getline();
 }
 
+#define ABS_PATH(x) std::filesystem::absolute(x).c_str()
+
 int main(int argc, char** argv){
-    pkpy::VM* vm = pkpy_new_vm();
+#if _WIN32
+    SetConsoleOutputCP(CP_UTF8);
+    void* p = LoadLibraryA(ABS_PATH("pocketpy.dll"));
+#elif __linux__
+    void* p = dlopen(ABS_PATH("libpocketpy.so"), RTLD_NOW | RTLD_GLOBAL);
+#elif __APPLE__
+    void* p = dlopen(ABS_PATH("libpocketpy.dylib"), RTLD_NOW | RTLD_GLOBAL);
+#endif
+    if(p == nullptr){
+        std::cerr << "unable to load dynamic library" << std::endl;
+        return 1;
+    }
 
+    pkpy::VM* vm = pkpy_new_vm();
     pkpy::_bind(vm, vm->builtins, "input() -> str", &f_input);
 
     if(argc == 1){