Ver Fonte

feat: 添加xxxExport.h头文件

SongZihuan há 3 anos atrás
pai
commit
6dca11a6d9

+ 4 - 3
CMakeLists.txt

@@ -8,7 +8,8 @@ set(C_STANDARD_REQUIRED OFF)
 set(BUILD_SHARED_LIBS OFF)  # 默认编译静态库 (该设定不可被修改)
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
 
-set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)  # TOFIX: 不导出所有符号
+set(VISIBILITY_INLINES_HIDDEN TRUE)  # 默认内联函数不可见
+set(CMAKE_C_VISIBILITY_PRESET "hidden")  # 默认所有符号不可见
 
 # 系统检查
 include(CheckCCompilerFlag)
@@ -41,11 +42,11 @@ set(CMAKE_INSTALL_RPATH
     "${CMAKE_INSTALL_PREFIX}/${deps_install_dir}/${INSTALL_LIBDIR}")  # INSTALL_RPATH 初始化值
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 set(CMAKE_MACOSX_RPATH TRUE)
-include_directories(${CMAKE_SOURCE_DIR}/include)  # 添加默认的include路径
+include_directories(${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR})  # 添加默认的include路径
 
 include(${CMAKE_CURRENT_LIST_DIR}/deps/deps.cmake)  # 安装依赖
-
 add_subdirectory(src)
+include(aFunHeader)
 
 install(EXPORT aFunlang
         NAMESPACE "aFunlang::"

+ 14 - 0
cmake/aFunHeader.cmake

@@ -0,0 +1,14 @@
+include(GenerateExportHeader)
+
+generate_export_header(tool-shared
+                       EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}/aFunToolExport.h"  # 导出的位置
+                       BASE_NAME "AFUN_TOOL")
+
+generate_export_header(core-shared-t
+                       EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}/aFunCoreExport.h"  # 导出的位置
+                       BASE_NAME "AFUN_CORE")
+
+target_compile_definitions(tool-static PUBLIC AFUN_TOOL_STATIC_DEFINE)  # 静态库需要定义 AFUN_TOOL_STATIC_DEFINE
+
+target_compile_definitions(core-shared-s PRIVATE core_shared_t_EXPORTS)
+target_compile_definitions(core-static-s PUBLIC AFUN_CORE_STATIC_DEFINE)

+ 5 - 5
cmake/aFunlangConfig.cmake.in

@@ -8,23 +8,23 @@ include(${target})  # 调用msgTargets.cmake导入模块
 set(components_list)  # 记录组件的list
 
 # 检查是否存在对应 target
-if (TARGET aFunlang:tool-shared)
+if (TARGET aFunlang::tool-shared)
     list(APPEND components_list tool-shared)
 endif()
 
-if (TARGET aFunlang:tool-static)
+if (TARGET aFunlang::tool-static)
     list(APPEND components_list tool-shared)
 endif()
 
-if (TARGET aFunlang:core-shared-t)
+if (TARGET aFunlang::core-shared-t)
     list(APPEND components_list core-shared-t)
 endif()
 
-if (TARGET aFunlang:core-shared-s)
+if (TARGET aFunlang::core-shared-s)
     list(APPEND components_list core-shared-s)
 endif()
 
-if (TARGET aFunlang:core-static-s)
+if (TARGET aFunlang::core-static-s)
     list(APPEND components_list core-static-s)
 endif()
 

+ 1 - 0
cmake/info.cmake

@@ -9,6 +9,7 @@ endif()
 
 # 显示编译器信息(1)
 message(STATUS "CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}")  # 显示C编译器的路径
+message(STATUS "CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}")  # 显示CPP编译器的路径
 message(STATUS "CMAKE_C_FLAGS = ${CMAKE_C_FLAGS}")  # 显示C编译器的选项
 message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")  # 当前的构建类型(若为设置则为空)
 

+ 2 - 3
include/core/aFunCore.h

@@ -1,5 +1,6 @@
 #ifndef AFUN_AFUNCORE_H
 #define AFUN_AFUNCORE_H
+#include "aFunCoreExport.h"
 #include "tool.h"
 
 #include "magic_func.h"
@@ -9,6 +10,7 @@
 #include "parserl_warning_error.h"
 #include "runtime_error.h"
 
+#include "core_init.h"
 #include "run.h"
 #include "code.h"
 #include "env.h"
@@ -20,7 +22,4 @@
 #include "reader.h"
 #include "token.h"
 
-// Init系列函数
-void aFunInit(void);
-
 #endif //AFUN_AFUNCORE_H

+ 12 - 10
include/core/code.h

@@ -1,6 +1,7 @@
 #ifndef AFUN_BYTECODE
 #define AFUN_BYTECODE
 #include <stdio.h>
+#include "aFunCoreExport.h"
 
 #define CODE_STR_MAX_SIZE (50)
 typedef struct af_Code af_Code;
@@ -13,23 +14,24 @@ enum af_BlockType {
 };
 
 /* 代码块创建函数 */
-af_Code *makeElementCode(char *var, char prefix, FileLine line, FilePath path);
-af_Code *makeBlockCode(enum af_BlockType type, af_Code *element, char prefix, FileLine line, FilePath path, af_Code **next);
+AFUN_CORE_EXPORT af_Code *makeElementCode(char *var, char prefix, FileLine line, FilePath path);
+AFUN_CORE_EXPORT af_Code *makeBlockCode(enum af_BlockType type, af_Code *element, char prefix,
+        FileLine line, FilePath path, af_Code **next);
 
 /* 代码块释放函数 */
-void freeAllCode(af_Code *bt);
+AFUN_CORE_EXPORT void freeAllCode(af_Code *bt);
 
 /* 代码块操作函数 */
-af_Code *connectCode(af_Code **base, af_Code *next);
-af_Code *copyCode(af_Code *base, FilePath *path);
+AFUN_CORE_EXPORT af_Code *connectCode(af_Code **base, af_Code *next);
+AFUN_CORE_EXPORT af_Code *copyCode(af_Code *base, FilePath *path);
 
 /* 代码块属性获取函数 */
-bool getCodeBlockNext(af_Code *bt, af_Code **next);
-void printCode(af_Code *bt);
-char *codeToStr(af_Code *code, int n);
+AFUN_CORE_EXPORT bool getCodeBlockNext(af_Code *bt, af_Code **next);
+AFUN_CORE_EXPORT void printCode(af_Code *bt);
+AFUN_CORE_EXPORT char *codeToStr(af_Code *code, int n);
 
 /* 代码块IO函数 */
-bool writeAllCode(af_Code *bt, FILE *file);
-bool readAllCode(af_Code **bt, FILE *file);
+AFUN_CORE_EXPORT bool writeAllCode(af_Code *bt, FILE *file);
+AFUN_CORE_EXPORT bool readAllCode(af_Code **bt, FILE *file);
 
 #endif //AFUN_BYTECODE

+ 7 - 0
include/core/core_init.h

@@ -0,0 +1,7 @@
+#ifndef AFUN_INIT_H
+#define AFUN_INIT_H
+#include "aFunCoreExport.h"
+
+AFUN_CORE_EXPORT void aFunCoreInit(void);
+
+#endif //AFUN_INIT_H

+ 36 - 35
include/core/env.h

@@ -1,5 +1,6 @@
 #ifndef AFUN_ENV
 #define AFUN_ENV
+#include "aFunCoreExport.h"
 #include "tool.h"
 #include "prefix_macro.h"
 
@@ -21,66 +22,66 @@ enum GcRunTime {
 #include "var.h"
 
 /* 前缀管理函数 */
-char getPrefix(size_t name, af_Environment *env);
-char setPrefix(size_t name, char prefix, af_Environment *env);
+AFUN_CORE_EXPORT char getPrefix(size_t name, af_Environment *env);
+AFUN_CORE_EXPORT char setPrefix(size_t name, char prefix, af_Environment *env);
 
 /* 运行环境函数 */
-af_Environment *makeEnvironment(enum GcRunTime grt);
-void enableEnvironment(af_Environment *env);
-void freeEnvironment(af_Environment *env);
+AFUN_CORE_EXPORT af_Environment *makeEnvironment(enum GcRunTime grt);
+AFUN_CORE_EXPORT void enableEnvironment(af_Environment *env);
+AFUN_CORE_EXPORT void freeEnvironment(af_Environment *env);
 
 /* 保护空间管理函数 */
-bool addVarToProtectVarSpace(af_Var *var, af_Environment *env);
-af_Object *getBaseObject(char *name, af_Environment *env);
-af_VarSpace *getProtectVarSpace(af_Environment *env);
+AFUN_CORE_EXPORT bool addVarToProtectVarSpace(af_Var *var, af_Environment *env);
+AFUN_CORE_EXPORT af_Object *getBaseObject(char *name, af_Environment *env);
+AFUN_CORE_EXPORT af_VarSpace *getProtectVarSpace(af_Environment *env);
 
 /* Core 退出与停止 */
-void setCoreStop(af_Environment *env);
-void setCoreExit(int exit_code, af_Environment *env);
-void setCoreNormal(af_Environment *env);
+AFUN_CORE_EXPORT void setCoreStop(af_Environment *env);
+AFUN_CORE_EXPORT void setCoreExit(int exit_code, af_Environment *env);
+AFUN_CORE_EXPORT void setCoreNormal(af_Environment *env);
 
 /* 消息创建与释放函数 */
-af_Message *makeMessage(char *type, size_t size);
-af_Message *freeMessage(af_Message *msg);
-void freeAllMessage(af_Message *msg);
-bool freeMessageCount(size_t count, af_Message *msg);
+AFUN_CORE_EXPORT af_Message *makeMessage(char *type, size_t size);
+AFUN_CORE_EXPORT af_Message *freeMessage(af_Message *msg);
+AFUN_CORE_EXPORT void freeAllMessage(af_Message *msg);
+AFUN_CORE_EXPORT bool freeMessageCount(size_t count, af_Message *msg);
 
 /* 消息管理函数 */
-void pushMessageUp(af_Message *msg, af_Environment *env);
-void *popMessageUpData(char *type, af_Environment *env);
-af_Message *popMessageUp(af_Environment *env);
-void *getMessageData(af_Message *msg);
-void connectMessage(af_Message **base, af_Message *msg);
+AFUN_CORE_EXPORT void pushMessageUp(af_Message *msg, af_Environment *env);
+AFUN_CORE_EXPORT void *popMessageUpData(char *type, af_Environment *env);
+AFUN_CORE_EXPORT af_Message *popMessageUp(af_Environment *env);
+AFUN_CORE_EXPORT void *getMessageData(af_Message *msg);
+AFUN_CORE_EXPORT void connectMessage(af_Message **base, af_Message *msg);
 
 /* 消息工具函数 */
-af_Message *makeNORMALMessage(af_Object *obj);
-af_Message *makeERRORMessage(char *type, char *error, af_Environment *env);
-af_Message *makeERRORMessageFormate(char *type, af_Environment *env, const char *formate, ...);
+AFUN_CORE_EXPORT af_Message *makeNORMALMessage(af_Object *obj);
+AFUN_CORE_EXPORT af_Message *makeERRORMessage(char *type, char *error, af_Environment *env);
+AFUN_CORE_EXPORT af_Message *makeERRORMessageFormate(char *type, af_Environment *env, const char *formate, ...);
 
 /* 下行消息表管理函数 */
-void pushMessageDown(af_Message *msg, af_Environment *env);
-af_Message *popMessageDown(char *type, af_Environment *env);
-af_Message *getFirstMessage(af_Environment *env);
+AFUN_CORE_EXPORT void pushMessageDown(af_Message *msg, af_Environment *env);
+AFUN_CORE_EXPORT af_Message *popMessageDown(char *type, af_Environment *env);
+AFUN_CORE_EXPORT af_Message *getFirstMessage(af_Environment *env);
 
 /* 环境变量管理函数 */
-void setEnvVar(char *name, char *data, af_Environment *env);
-char *findEnvVar(char *name, af_Environment *env);
+AFUN_CORE_EXPORT void setEnvVar(char *name, char *data, af_Environment *env);
+AFUN_CORE_EXPORT char *findEnvVar(char *name, af_Environment *env);
 
 /* 顶层消息处理器管理函数 */
-void addTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func, af_Environment *env);
-bool changeTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func, af_Environment *env);
+AFUN_CORE_EXPORT void addTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func, af_Environment *env);
+AFUN_CORE_EXPORT bool changeTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func, af_Environment *env);
 
 /* LiteralRegex操作函数 */
-bool pushLiteralRegex(char *pattern, char *func, bool in_protect, af_Environment *env);
+AFUN_CORE_EXPORT bool pushLiteralRegex(char *pattern, char *func, bool in_protect, af_Environment *env);
 
 /* ErrorInfo 创建与释放 */
-af_ErrorInfo *makeErrorInfo(char *type, char *error, char *note, FileLine line, FilePath path);
-void freeErrorInfo(af_ErrorInfo *ei);
+AFUN_CORE_EXPORT af_ErrorInfo *makeErrorInfo(char *type, char *error, char *note, FileLine line, FilePath path);
+AFUN_CORE_EXPORT void freeErrorInfo(af_ErrorInfo *ei);
 
 /* ErrorInfo 操作函数 */
-void fprintfErrorInfo(FILE *file, af_ErrorInfo *ei);
+AFUN_CORE_EXPORT void fprintfErrorInfo(FILE *file, af_ErrorInfo *ei);
 
 /* ErrorBacktracking 操作函数 */
-void pushErrorBacktracking(FileLine line, FilePath file, char *note, af_ErrorInfo *ei);
+AFUN_CORE_EXPORT void pushErrorBacktracking(FileLine line, FilePath file, char *note, af_ErrorInfo *ei);
 
 #endif //AFUN_ENV

+ 26 - 24
include/core/func.h

@@ -5,6 +5,7 @@ typedef struct af_ArgList af_ArgList;
 typedef struct af_FuncInfo af_FuncInfo;
 typedef struct af_FuncBody af_FuncBody;
 
+#include "aFunCoreExport.h"
 #include "code.h"
 #include "object.h"
 
@@ -25,42 +26,43 @@ typedef struct af_FuncBody *callFuncBody(void *make, af_Environment *env);
 DEFINE_DLC_SYMBOL(callFuncBody);
 
 /* af_ArgCodeList 创建与释放 */
-af_ArgCodeList *makeArgCodeList(af_Code *code, size_t size, bool free_code, bool run_in_func);
-af_ArgCodeList *freeArgCodeList(af_ArgCodeList *acl);
-void freeAllArgCodeList(af_ArgCodeList *acl);
+AFUN_CORE_EXPORT af_ArgCodeList *makeArgCodeList(af_Code *code, size_t size, bool free_code, bool run_in_func);
+AFUN_CORE_EXPORT af_ArgCodeList *freeArgCodeList(af_ArgCodeList *acl);
+AFUN_CORE_EXPORT void freeAllArgCodeList(af_ArgCodeList *acl);
 
 /* af_ArgCodeList 操作函数 */
-af_ArgCodeList **pushArgCodeList(af_ArgCodeList **base, af_ArgCodeList *new);
-af_ArgCodeList **pushNewArgCodeList(af_ArgCodeList **base, af_Code *code, size_t size, bool free_code, bool run_in_func);
-void *getArgCodeListData(af_ArgCodeList *acl);
-af_Object *getArgCodeListResult(af_ArgCodeList *acl);
+AFUN_CORE_EXPORT af_ArgCodeList **pushArgCodeList(af_ArgCodeList **base, af_ArgCodeList *new);
+AFUN_CORE_EXPORT af_ArgCodeList **pushNewArgCodeList(af_ArgCodeList **base, af_Code *code, size_t size, bool free_code,
+                                                     bool run_in_func);
+AFUN_CORE_EXPORT void *getArgCodeListData(af_ArgCodeList *acl);
+AFUN_CORE_EXPORT af_Object *getArgCodeListResult(af_ArgCodeList *acl);
 
 /* af_ArgList 创建与释放 */
-af_ArgList *makeArgList(char *name, af_Object *obj);
-af_ArgList *freeArgList(af_ArgList *al);
-void freeAllArgList(af_ArgList *al);
+AFUN_CORE_EXPORT af_ArgList *makeArgList(char *name, af_Object *obj);
+AFUN_CORE_EXPORT af_ArgList *freeArgList(af_ArgList *al);
+AFUN_CORE_EXPORT void freeAllArgList(af_ArgList *al);
 
 /* af_ArgList 操作函数 */
-af_ArgList **pushArgList(af_ArgList **base, af_ArgList *new);
-af_ArgList **pushNewArgList(af_ArgList **base, char *name, af_Object *obj);
+AFUN_CORE_EXPORT af_ArgList **pushArgList(af_ArgList **base, af_ArgList *new);
+AFUN_CORE_EXPORT af_ArgList **pushNewArgList(af_ArgList **base, char *name, af_Object *obj);
 
-bool runArgList(af_ArgList *al, af_VarSpaceListNode *vsl, af_Environment *env);
+AFUN_CORE_EXPORT bool runArgList(af_ArgList *al, af_VarSpaceListNode *vsl, af_Environment *env);
 
 /* FuncBody 创建与释放 */
-af_FuncBody *makeCodeFuncBody(af_Code *code, bool free_code, char **msg_type);
-af_FuncBody *makeCFuncBody(DLC_SYMBOL(callFuncBody) c_func, char **msg_type);
-af_FuncBody *makeDynamicFuncBody(void);
-af_FuncBody *freeFuncBody(af_FuncBody *fb);
-void freeAllFuncBody(af_FuncBody *fb);
+AFUN_CORE_EXPORT af_FuncBody *makeCodeFuncBody(af_Code *code, bool free_code, char **msg_type);
+AFUN_CORE_EXPORT af_FuncBody *makeCFuncBody(DLC_SYMBOL(callFuncBody) c_func, char **msg_type);
+AFUN_CORE_EXPORT af_FuncBody *makeDynamicFuncBody(void);
+AFUN_CORE_EXPORT af_FuncBody *freeFuncBody(af_FuncBody *fb);
+AFUN_CORE_EXPORT void freeAllFuncBody(af_FuncBody *fb);
 
 /* FuncInfo 创建与释放 */
-af_FuncInfo *makeFuncInfo(enum af_FuncInfoScope scope, enum af_FuncInfoEmbedded embedded, bool is_macro, bool var_this, bool var_func);
-
-void freeFuncInfo(af_FuncInfo *fi);
+AFUN_CORE_EXPORT af_FuncInfo *makeFuncInfo(enum af_FuncInfoScope scope, enum af_FuncInfoEmbedded embedded,
+        bool is_macro, bool var_this, bool var_func);
+AFUN_CORE_EXPORT void freeFuncInfo(af_FuncInfo *fi);
 
 /* FuncInfo 操作函数 */
-void makeCFuncBodyToFuncInfo(DLC_SYMBOL(callFuncBody) c_func, char **msg_type, af_FuncInfo *fi);
-void makeCodeFuncBodyToFuncInfo(af_Code *code, bool free_code, char **msg_type, af_FuncInfo *fi);
-void makeDynamicFuncBodyToFuncInfo(af_FuncInfo *fi);
+AFUN_CORE_EXPORT void makeCFuncBodyToFuncInfo(DLC_SYMBOL(callFuncBody) c_func, char **msg_type, af_FuncInfo *fi);
+AFUN_CORE_EXPORT void makeCodeFuncBodyToFuncInfo(af_Code *code, bool free_code, char **msg_type, af_FuncInfo *fi);
+AFUN_CORE_EXPORT void makeDynamicFuncBodyToFuncInfo(af_FuncInfo *fi);
 
 #endif //AFUN_FUNC

+ 13 - 12
include/core/gc.h

@@ -1,5 +1,6 @@
 #ifndef AFUN_GC
 #define AFUN_GC
+#include "aFunCoreExport.h"
 #include "object.h"
 #include "var.h"
 
@@ -24,25 +25,25 @@ enum af_GcListType {
                                af_VarSpace *: gc_delVarSpaceReference))(obj))
 
 /* gc_DestructList 释放函数*/
-void freeAllDestructList(gc_DestructList *dl);
+AFUN_CORE_EXPORT void freeAllDestructList(gc_DestructList *dl);
 
 /* GcList 操作函数 */
-af_GcList *pushGcList(enum af_GcListType type, void *data, af_GcList *base);
+AFUN_CORE_EXPORT af_GcList *pushGcList(enum af_GcListType type, void *data, af_GcList *base);
 
 /* gc 对象新增函数 */
-void gc_addObject(af_Object *obj, af_Environment *env);
-void gc_addVar(af_Var *obj, af_Environment *env);
-void gc_addVarSpace(af_VarSpace *obj, af_Environment *env);
+AFUN_CORE_EXPORT void gc_addObject(af_Object *obj, af_Environment *env);
+AFUN_CORE_EXPORT void gc_addVar(af_Var *obj, af_Environment *env);
+AFUN_CORE_EXPORT void gc_addVarSpace(af_VarSpace *obj, af_Environment *env);
 
 /* gc Reference 管理函数 */
-void gc_addObjectReference(af_Object *obj);
-void gc_addVarReference(af_Var *obj);
-void gc_addVarSpaceReference(af_VarSpace *obj);
-void gc_delObjectReference(af_Object *obj);
-void gc_delVarReference(af_Var *obj);
-void gc_delVarSpaceReference(af_VarSpace *obj);
+AFUN_CORE_EXPORT void gc_addObjectReference(af_Object *obj);
+AFUN_CORE_EXPORT void gc_addVarReference(af_Var *obj);
+AFUN_CORE_EXPORT void gc_addVarSpaceReference(af_VarSpace *obj);
+AFUN_CORE_EXPORT void gc_delObjectReference(af_Object *obj);
+AFUN_CORE_EXPORT void gc_delVarReference(af_Var *obj);
+AFUN_CORE_EXPORT void gc_delVarSpaceReference(af_VarSpace *obj);
 
 /* gc 运行时函数 */
-void resetGC(af_Environment *env);
+AFUN_CORE_EXPORT void resetGC(af_Environment *env);
 
 #endif //AFUN_GC

+ 17 - 16
include/core/object.h

@@ -1,5 +1,6 @@
 #ifndef AFUN_OBJECT
 #define AFUN_OBJECT
+#include "aFunCoreExport.h"
 #include "tool.h"
 
 typedef struct af_Object af_Object;
@@ -14,34 +15,34 @@ DEFINE_DLC_SYMBOL(objectAPIFunc);
 #include "env.h"
 
 /* 对象创建与释放函数 */
-af_Object *makeObject(char *id, bool free_api, af_ObjectAPI *api, bool allow_inherit, af_Object *belong,
+AFUN_CORE_EXPORT af_Object *makeObject(char *id, bool free_api, af_ObjectAPI *api, bool allow_inherit, af_Object *belong,
                       af_Inherit *inherit, af_Environment *env);
-void freeObject(af_Object *obj, af_Environment *env);
+AFUN_CORE_EXPORT void freeObject(af_Object *obj, af_Environment *env);
 
 /* 对象属性获取函数 */
-void *getObjectData(af_Object *obj);
-af_Object *getBelongObject(af_Object *object);
-af_Object *findObjectAttributes(char *name, af_Object *visitor, af_Object *obj);
+AFUN_CORE_EXPORT void *getObjectData(af_Object *obj);
+AFUN_CORE_EXPORT af_Object *getBelongObject(af_Object *object);
+AFUN_CORE_EXPORT af_Object *findObjectAttributes(char *name, af_Object *visitor, af_Object *obj);
 
 /* 对象属性设置 */
-bool setObjectAttributes(char *name, char p_self, char p_posterity, char p_external, af_Object *attributes,
+AFUN_CORE_EXPORT bool setObjectAttributes(char *name, char p_self, char p_posterity, char p_external, af_Object *attributes,
                          af_Object *obj, af_Object *visitor, af_Environment *env);
 
 /* 对象继承关系函数 */
-af_Inherit *makeInherit(af_Object *obj);
-af_Inherit *freeInherit(af_Inherit *ih);
-void freeAllInherit(af_Inherit *ih);
-bool checkPosterity(af_Object *base, af_Object *posterity);
+AFUN_CORE_EXPORT af_Inherit *makeInherit(af_Object *obj);
+AFUN_CORE_EXPORT af_Inherit *freeInherit(af_Inherit *ih);
+AFUN_CORE_EXPORT void freeAllInherit(af_Inherit *ih);
+AFUN_CORE_EXPORT bool checkPosterity(af_Object *base, af_Object *posterity);
 
 /* API表 创建与释放 */
-af_ObjectAPI *makeObjectAPI(void);
-void freeObjectAPI(af_ObjectAPI *api);
+AFUN_CORE_EXPORT af_ObjectAPI *makeObjectAPI(void);
+AFUN_CORE_EXPORT void freeObjectAPI(af_ObjectAPI *api);
 
 /* API表 管理函数 */
-int addAPI(DLC_SYMBOL(objectAPIFunc) func, char *api_name, af_ObjectAPI *api);
-void *findAPI(char *api_name, af_ObjectAPI *api);
+AFUN_CORE_EXPORT int addAPI(DLC_SYMBOL(objectAPIFunc) func, char *api_name, af_ObjectAPI *api);
+AFUN_CORE_EXPORT void *findAPI(char *api_name, af_ObjectAPI *api);
 
 /* 对象API函数 */
-void *findObjectAPI(char *api_name, af_Object *obj);
-int addAPIToObject(DLC_SYMBOL(objectAPIFunc) func, char *api_name, af_Object *obj);
+AFUN_CORE_EXPORT void *findObjectAPI(char *api_name, af_Object *obj);
+AFUN_CORE_EXPORT int addAPIToObject(DLC_SYMBOL(objectAPIFunc) func, char *api_name, af_Object *obj);
 #endif //AFUN_OBJECT

+ 9 - 8
include/core/parser.h

@@ -1,5 +1,6 @@
 #ifndef AFUN_PARSER_H
 #define AFUN_PARSER_H
+#include "aFunCoreExport.h"
 #include "tool.h"
 #include "token.h"
 #include "reader.h"
@@ -8,16 +9,16 @@
 typedef struct af_Parser af_Parser;
 
 /* Parser 创建与释放 */
-af_Parser *makeParser(DLC_SYMBOL(readerFunc) read_func, DLC_SYMBOL(destructReaderFunc) destruct_func, size_t data_size,
+AFUN_CORE_EXPORT af_Parser *makeParser(DLC_SYMBOL(readerFunc) read_func, DLC_SYMBOL(destructReaderFunc) destruct_func, size_t data_size,
                       FILE *error);
-void freeParser(af_Parser *parser);
-af_Parser *makeParserByString(char *str, bool free_str, FILE *error);
-af_Parser *makeParserByFile(FilePath path, FILE *error);
+AFUN_CORE_EXPORT void freeParser(af_Parser *parser);
+AFUN_CORE_EXPORT af_Parser *makeParserByString(char *str, bool free_str, FILE *error);
+AFUN_CORE_EXPORT af_Parser *makeParserByFile(FilePath path, FILE *error);
 
 /* Parser 操作函数 */
-af_Code *parserCode(af_Parser *parser);
-af_TokenType getTokenFromLexical(char **text, af_Parser *parser);
-void *getParserData(af_Parser *parser);
-void initParser(af_Parser *parser);
+AFUN_CORE_EXPORT af_Code *parserCode(af_Parser *parser);
+AFUN_CORE_EXPORT af_TokenType getTokenFromLexical(char **text, af_Parser *parser);
+AFUN_CORE_EXPORT void *getParserData(af_Parser *parser);
+AFUN_CORE_EXPORT void initParser(af_Parser *parser);
 
 #endif //AFUN_PARSER_H

+ 3 - 2
include/core/run.h

@@ -1,9 +1,10 @@
 #ifndef AFUN_RUN_H
 #define AFUN_RUN_H
+#include "aFunCoreExport.h"
 #include "tool.h"
 #include "code.h"
 
 /* 代码运行工具 */
-bool iterCode(af_Code *code, af_Environment *env);
-bool iterDestruct(int deep, af_Environment *env);
+AFUN_CORE_EXPORT bool iterCode(af_Code *code, af_Environment *env);
+AFUN_CORE_EXPORT bool iterDestruct(int deep, af_Environment *env);
 #endif //AFUN_RUN_H

+ 23 - 22
include/core/var.h

@@ -5,51 +5,52 @@ typedef struct af_Var af_Var;
 typedef struct af_VarSpace af_VarSpace;
 typedef struct af_VarSpaceListNode af_VarSpaceListNode;
 
+#include "aFunCoreExport.h"
 #include "tool.h"
 #include "object.h"
 
 /* 变量创建与释放 */
-af_Var *makeVar(char *name, char p_self, char p_posterity, char p_external, af_Object *obj, af_Environment *env);
-void freeVar(af_Var *var, af_Environment *env);
+AFUN_CORE_EXPORT af_Var *makeVar(char *name, char p_self, char p_posterity, char p_external, af_Object *obj, af_Environment *env);
+AFUN_CORE_EXPORT void freeVar(af_Var *var, af_Environment *env);
 
 /* 变量值管理 */
-void addVarNode(af_Var var, af_Object *obj, char *id);
+AFUN_CORE_EXPORT void addVarNode(af_Var var, af_Object *obj, char *id);
 
 /* 变量空间创建与释放 */
-af_VarSpace *makeVarSpace(af_Object *belong, af_Environment *env);
-void freeVarSpace(af_VarSpace *vs, af_Environment *env);
+AFUN_CORE_EXPORT af_VarSpace *makeVarSpace(af_Object *belong, af_Environment *env);
+AFUN_CORE_EXPORT void freeVarSpace(af_VarSpace *vs, af_Environment *env);
 
 /* 变量定义函数 */
-bool addVarToVarSpace(af_Var *var, af_Object *visitor, af_VarSpace *vs);
-bool makeVarToVarSpace(char *name, char p_self, char p_posterity, char p_external, af_Object *obj, af_VarSpace *vs,
+AFUN_CORE_EXPORT bool addVarToVarSpace(af_Var *var, af_Object *visitor, af_VarSpace *vs);
+AFUN_CORE_EXPORT bool makeVarToVarSpace(char *name, char p_self, char p_posterity, char p_external, af_Object *obj, af_VarSpace *vs,
                        af_Object *visitor, af_Environment *env);
-bool addVarToVarSpaceList(af_Var *var, af_Object *visitor, af_VarSpaceListNode *vsl);
-bool makeVarToVarSpaceList(char *name, char p_self, char p_posterity, char p_external, af_Object *obj,
+AFUN_CORE_EXPORT bool addVarToVarSpaceList(af_Var *var, af_Object *visitor, af_VarSpaceListNode *vsl);
+AFUN_CORE_EXPORT bool makeVarToVarSpaceList(char *name, char p_self, char p_posterity, char p_external, af_Object *obj,
                            af_VarSpaceListNode *vsl, af_Object *visitor, af_Environment *env);
 
 /* 变量删除函数 */
-bool delVarFromVarSpace(char *name, af_Object *visitor, af_VarSpace *vs);
-bool delVarFromVarList(char *name, af_Object *visitor, af_VarSpaceListNode *vsl);
+AFUN_CORE_EXPORT bool delVarFromVarSpace(char *name, af_Object *visitor, af_VarSpace *vs);
+AFUN_CORE_EXPORT bool delVarFromVarList(char *name, af_Object *visitor, af_VarSpaceListNode *vsl);
 
 /* 变量访问函数 */
-af_Var *findVarFromVarSpace(char *name, af_Object *visitor, af_VarSpace *vs);
-af_Var *findVarFromVarList(char *name, af_Object *visitor, af_VarSpaceListNode *vsl);
+AFUN_CORE_EXPORT af_Var *findVarFromVarSpace(char *name, af_Object *visitor, af_VarSpace *vs);
+AFUN_CORE_EXPORT af_Var *findVarFromVarList(char *name, af_Object *visitor, af_VarSpaceListNode *vsl);
 
 /* 变量设置函数 */
-bool setVarToVarSpace(char *name, af_Object *obj, af_Object *visitor, af_VarSpace *vs);
-bool setVarToVarList(char *name, af_Object *obj, af_Object *visitor, af_VarSpaceListNode *vsl);
+AFUN_CORE_EXPORT bool setVarToVarSpace(char *name, af_Object *obj, af_Object *visitor, af_VarSpace *vs);
+AFUN_CORE_EXPORT bool setVarToVarList(char *name, af_Object *obj, af_Object *visitor, af_VarSpaceListNode *vsl);
 
 /* 变量空间链的创建与释放 */
-af_VarSpaceListNode *makeVarSpaceList(af_VarSpace *vs);
-af_VarSpaceListNode *freeVarSpaceList(af_VarSpaceListNode *vsl);
-void freeAllVarSpaceList(af_VarSpaceListNode *vsl);
-bool freeVarSpaceListCount(size_t count, af_VarSpaceListNode *vsl);
+AFUN_CORE_EXPORT af_VarSpaceListNode *makeVarSpaceList(af_VarSpace *vs);
+AFUN_CORE_EXPORT af_VarSpaceListNode *freeVarSpaceList(af_VarSpaceListNode *vsl);
+AFUN_CORE_EXPORT void freeAllVarSpaceList(af_VarSpaceListNode *vsl);
+AFUN_CORE_EXPORT bool freeVarSpaceListCount(size_t count, af_VarSpaceListNode *vsl);
 
 /* 变量空间链属性获取 */
-af_VarSpace *getVarSpaceFromList(af_VarSpaceListNode *vsl);
+AFUN_CORE_EXPORT af_VarSpace *getVarSpaceFromList(af_VarSpaceListNode *vsl);
 
 /* 变量空间链管理 */
-af_VarSpaceListNode *pushNewVarList(af_Object *belong, af_VarSpaceListNode *base, af_Environment *env);
-af_VarSpaceListNode *popLastVarList(af_VarSpaceListNode *base);
+AFUN_CORE_EXPORT af_VarSpaceListNode *pushNewVarList(af_Object *belong, af_VarSpaceListNode *base, af_Environment *env);
+AFUN_CORE_EXPORT af_VarSpaceListNode *popLastVarList(af_VarSpaceListNode *base);
 
 #endif //AFUN_VAR

+ 12 - 11
include/tool/btye.h

@@ -1,6 +1,7 @@
 #ifndef AFUN_BYTE_H
 #define AFUN_BYTE_H
 #include <stdio.h>
+#include "aFunToolExport.h"
 
 // byte工具
 #define byteWriteInt_8(file, s) (byteWriteUint_8(file, ((uint8_t)(s))))
@@ -20,17 +21,17 @@ enum af_EndianType{
 
 extern enum af_EndianType endian;
 
-void getEndian();
-bool byteWriteUint_8(FILE *file, uint8_t ch);
-bool byteWriteUint_16(FILE *file, uint16_t num);
-bool byteWriteUint_32(FILE *file, uint32_t num);
-bool byteWriteUint_64(FILE *file, uint64_t num);
-bool byteWriteStr(FILE *file, char *str);
+AFUN_TOOL_EXPORT void getEndian();
+AFUN_TOOL_EXPORT bool byteWriteUint_8(FILE *file, uint8_t ch);
+AFUN_TOOL_EXPORT bool byteWriteUint_16(FILE *file, uint16_t num);
+AFUN_TOOL_EXPORT bool byteWriteUint_32(FILE *file, uint32_t num);
+AFUN_TOOL_EXPORT bool byteWriteUint_64(FILE *file, uint64_t num);
+AFUN_TOOL_EXPORT bool byteWriteStr(FILE *file, char *str);
 
-bool byteReadUint_8(FILE *file, uint8_t *ch);
-bool byteReadUint_16(FILE *file, uint16_t *num);
-bool byteReadUint_32(FILE *file, uint32_t *num);
-bool byteReadUint_64(FILE *file, uint64_t *num);
-bool byteReadStr(FILE *file, char **str);
+AFUN_TOOL_EXPORT bool byteReadUint_8(FILE *file, uint8_t *ch);
+AFUN_TOOL_EXPORT bool byteReadUint_16(FILE *file, uint16_t *num);
+AFUN_TOOL_EXPORT bool byteReadUint_32(FILE *file, uint32_t *num);
+AFUN_TOOL_EXPORT bool byteReadUint_64(FILE *file, uint64_t *num);
+AFUN_TOOL_EXPORT bool byteReadStr(FILE *file, char **str);
 
 #endif //AFUN_BYTE_H

+ 9 - 7
include/tool/dlc.h

@@ -1,5 +1,6 @@
 #ifndef AFUN_DLC_H
 #define AFUN_DLC_H
+#include "aFunToolExport.h"
 #include "dlfcn.h"  // CMake 处理 dlfcn.h 的位置
 
 /* 动态库工具(dlc): 处理动态库的使用 */
@@ -34,13 +35,14 @@ struct DlcHandle *dlc; \
 typedef struct DlcSymbol_ DlcSymbol_;
 typedef struct DlcHandle DlcHandle;
 
-struct DlcHandle *openLibary(const char *file, int mode);
-struct DlcSymbol_ *makeSymbol_(void *symbol);
-struct DlcSymbol_ *copySymbol_(struct DlcSymbol_ *ds);
-struct DlcSymbol_ *getSymbol_(struct DlcHandle *dlc, const char *name);
-void freeSymbol_(struct DlcSymbol_ *symbol);
-bool freeLibary(struct DlcHandle *dlc);
-void dlcExit(void);
+AFUN_TOOL_EXPORT struct DlcHandle *openLibary(const char *file, int mode);
+AFUN_TOOL_EXPORT struct DlcSymbol_ *makeSymbol_(void *symbol);
+AFUN_TOOL_EXPORT struct DlcSymbol_ *copySymbol_(struct DlcSymbol_ *ds);
+AFUN_TOOL_EXPORT struct DlcSymbol_ *getSymbol_(struct DlcHandle *dlc, const char *name);
+
+AFUN_TOOL_EXPORT void freeSymbol_(struct DlcSymbol_ *symbol);
+AFUN_TOOL_EXPORT bool freeLibary(struct DlcHandle *dlc);
+AFUN_TOOL_EXPORT void dlcExit(void);
 
 
 #endif //AFUN_DLC_H

+ 5 - 4
include/tool/file.h

@@ -1,10 +1,11 @@
 #ifndef AFUN_FILE_H
 #define AFUN_FILE_H
+#include "aFunToolExport.h"
 
 /* 文件处理工具 */
-int checkFile(char *path);
-char *getFileName(char *path_1);
-char *fileNameToVar(char *name, bool need_free);
-char *findPath(char *path, char *env, bool need_free);
+AFUN_TOOL_EXPORT int checkFile(char *path);
+AFUN_TOOL_EXPORT char *getFileName(char *path_1);
+AFUN_TOOL_EXPORT char *fileNameToVar(char *name, bool need_free);
+AFUN_TOOL_EXPORT char *findPath(char *path, char *env, bool need_free);
 
 #endif //AFUN_FILE_H

+ 3 - 2
include/tool/hash.h

@@ -1,10 +1,11 @@
 #ifndef AFUN_HASH_H
 #define AFUN_HASH_H
+#include "aFunToolExport.h"
 
 /* 哈希工具 */
 typedef long int time33_t;
 
-time33_t time33(char *str);
-time33_t w_time33(wchar_t *str);
+AFUN_TOOL_EXPORT time33_t time33(char *str);
+AFUN_TOOL_EXPORT time33_t w_time33(wchar_t *str);
 
 #endif //AFUN_HASH_H

+ 3 - 1
include/tool/md5.h

@@ -1,11 +1,13 @@
 #ifndef AFUN_MD5_H
 #define AFUN_MD5_H
+#include "aFunToolExport.h"
 
 /* md5计算工具 */
 #define READ_DATA_SIZE	(1024)
 #define MD5_SIZE (16)
 #define MD5_STR_LEN (MD5_SIZE * 2)
 #define MD5_STRING (MD5_STR_LEN + 1)
-int getFileMd5(const char *path, char *md5str);
+
+AFUN_TOOL_EXPORT int getFileMd5(const char *path, char *md5str);
 
 #endif //AFUN_MD5_H

+ 5 - 3
include/tool/regex.h

@@ -3,11 +3,13 @@
 
 #define REGEX_ERROR_SIZE (512)
 
+#include "aFunToolExport.h"
+
 typedef struct af_Regex af_Regex;
 extern char regex_error[REGEX_ERROR_SIZE];
 
-af_Regex *makeRegex(char *pattern);
-void freeRegex(af_Regex *rg);
-int matchRegex(char *subject, af_Regex *rg);
+AFUN_TOOL_EXPORT af_Regex *makeRegex(char *pattern);
+AFUN_TOOL_EXPORT void freeRegex(af_Regex *rg);
+AFUN_TOOL_EXPORT int matchRegex(char *subject, af_Regex *rg);
 
 #endif //AFUN_REGEX

+ 3 - 1
include/tool/sig.h

@@ -1,6 +1,7 @@
 #ifndef AFUN_SIG_H
 #define AFUN_SIG_H
 #include <signal.h>
+#include "aFunToolExport.h"
 
 /* 信号处理工具 */
 typedef int vsignal;
@@ -14,6 +15,7 @@ struct SignalTag{
 };
 
 extern volatile struct SignalTag signal_tag;  // 在tool.c中定义
-void afSignalHandler(int signum);
+
+AFUN_TOOL_EXPORT void afSignalHandler(int signum);
 
 #endif //AFUN_SIG_H

+ 16 - 15
include/tool/str.h

@@ -2,6 +2,7 @@
 #define AFUN_STR_H
 #include <wchar.h>
 #include <string.h>
+#include "aFunToolExport.h"
 
 /* 字符串工具 */
 #define EQ_STR(str1, str2) (!strcmp((str1), (str2)))
@@ -13,20 +14,20 @@
 #define NEW_WSTR(size) (wchar_t *)calloc((size) + 1, sizeof(wchar_t))
 #define STR_LEN(p) (((p) == NULL) ? 0 : strlen((p)))
 #define WSTR_LEN(p) (((p) == NULL) ? 0 : wcslen((p)))
-char *charToStr(char ch);
-char *strCopy(const char *str);
-wchar_t *wstrCopy(const wchar_t *str);
-wchar_t *wstrWithWchar(wchar_t *str, size_t size, int free_old, ...);
-wchar_t *wstrWithWchar_(wchar_t *str, wint_t new, bool free_old);
-wchar_t *wstrExpansion(wchar_t *str, size_t size, bool free_old);
-char *strJoinIter(char *base, int free_base, ...);
-char *strJoin(char *first, char *second, bool free_first, bool free_last);
-char *strJoin_(char *first, char *second, bool free_first, bool free_last);
-wchar_t *wstrJoin(wchar_t *first, wchar_t *second, bool free_first, bool free_last);
-wchar_t *wstrJoin_(wchar_t *first, wchar_t *second, bool free_first, bool free_last);
-wchar_t *wstrCopySelf(wchar_t *str, long times);
-wchar_t *wstrReverse(wchar_t *str);
-wchar_t *convertToWstr(char *str, bool free_old);
-char *convertToStr(wchar_t *wstr, bool free_old);
+AFUN_TOOL_EXPORT char *charToStr(char ch);
+AFUN_TOOL_EXPORT char *strCopy(const char *str);
+AFUN_TOOL_EXPORT wchar_t *wstrCopy(const wchar_t *str);
+AFUN_TOOL_EXPORT wchar_t *wstrWithWchar(wchar_t *str, size_t size, int free_old, ...);
+AFUN_TOOL_EXPORT wchar_t *wstrWithWchar_(wchar_t *str, wint_t new, bool free_old);
+AFUN_TOOL_EXPORT wchar_t *wstrExpansion(wchar_t *str, size_t size, bool free_old);
+AFUN_TOOL_EXPORT char *strJoinIter(char *base, int free_base, ...);
+AFUN_TOOL_EXPORT char *strJoin(char *first, char *second, bool free_first, bool free_last);
+AFUN_TOOL_EXPORT char *strJoin_(char *first, char *second, bool free_first, bool free_last);
+AFUN_TOOL_EXPORT wchar_t *wstrJoin(wchar_t *first, wchar_t *second, bool free_first, bool free_last);
+AFUN_TOOL_EXPORT wchar_t *wstrJoin_(wchar_t *first, wchar_t *second, bool free_first, bool free_last);
+AFUN_TOOL_EXPORT wchar_t *wstrCopySelf(wchar_t *str, long times);
+AFUN_TOOL_EXPORT wchar_t *wstrReverse(wchar_t *str);
+AFUN_TOOL_EXPORT wchar_t *convertToWstr(char *str, bool free_old);
+AFUN_TOOL_EXPORT char *convertToStr(wchar_t *wstr, bool free_old);
 
 #endif //AFUN_STR_H

+ 2 - 1
include/tool/time_s.h

@@ -1,7 +1,8 @@
 #ifndef AFUN_TIME_H
 #define AFUN_TIME_H
+#include "aFunToolExport.h"
 
 /* 时间工具 */
-void safeSleep(double ms);
+AFUN_TOOL_EXPORT void safeSleep(double ms);
 
 #endif //AFUN_TIME_H

+ 1 - 0
include/tool/tool.h

@@ -9,6 +9,7 @@
 
 #include "mem.h"
 #include "macro.h"
+#include "aFunToolExport.h"
 
 #include "btye.h"
 #include "dlc.h"

+ 21 - 21
src/core/__env.h

@@ -198,40 +198,40 @@ struct af_ErrorInfo {
 };
 
 /* Core 管理函数 */
-af_Object *getBaseObjectFromCore(char *name, af_Core *core);
+AFUN_CORE_NO_EXPORT af_Object *getBaseObjectFromCore(char *name, af_Core *core);
 
 /* Activity 运行初始化函数 */
-bool addTopActivity(af_Code *code, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool addTopActivity(af_Code *code, af_Environment *env);
 
 /* 运行时Activity设置函数 (新增Activity) */
-bool pushExecutionActivity(af_Code *bt, bool return_first, af_Environment *env);
-bool pushFuncActivity(af_Code *bt, af_Environment *env);
-void popActivity(bool is_normal, af_Message *msg, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool pushExecutionActivity(af_Code *bt, bool return_first, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool pushFuncActivity(af_Code *bt, af_Environment *env);
+AFUN_CORE_NO_EXPORT void popActivity(bool is_normal, af_Message *msg, af_Environment *env);
 
 /* 运行时Activity设置函数 (设置Activity) */
-bool pushDestructActivity(gc_DestructList *dl, af_Environment *env);
-void pushGCActivity(gc_DestructList *dl, gc_DestructList **pdl, af_Environment *env);
-bool pushVariableActivity(af_Code *bt, af_Object *func, af_Environment *env);
-bool pushLiteralActivity(af_Code *bt, char *data, af_Object *func, af_Environment *env);
-bool pushMacroFuncActivity(af_Object *func, af_Environment *env);
-bool setFuncActivityToArg(af_Object *func, af_Environment *env);
-bool setFuncActivityAddVar(af_Environment *env);
-int setFuncActivityToNormal(af_Environment *env);
-void setArgCodeListToActivity(af_ArgCodeList *acl, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool pushDestructActivity(gc_DestructList *dl, af_Environment *env);
+AFUN_CORE_NO_EXPORT void pushGCActivity(gc_DestructList *dl, gc_DestructList **pdl, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool pushVariableActivity(af_Code *bt, af_Object *func, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool pushLiteralActivity(af_Code *bt, char *data, af_Object *func, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool pushMacroFuncActivity(af_Object *func, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool setFuncActivityToArg(af_Object *func, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool setFuncActivityAddVar(af_Environment *env);
+AFUN_CORE_NO_EXPORT int setFuncActivityToNormal(af_Environment *env);
+AFUN_CORE_NO_EXPORT void setArgCodeListToActivity(af_ArgCodeList *acl, af_Environment *env);
 
 /* 运行时Activity设置函数 (设置Activity的行号和文件) */
-void setActivityBtTop(af_Code *bt_top, af_Activity *activity);
-void setActivityBtStart(af_Code *bt_start, af_Activity *activity);
-void setActivityBtNext(af_Code *bt_next, af_Activity *activity);
+AFUN_CORE_NO_EXPORT void setActivityBtTop(af_Code *bt_top, af_Activity *activity);
+AFUN_CORE_NO_EXPORT void setActivityBtStart(af_Code *bt_start, af_Activity *activity);
+AFUN_CORE_NO_EXPORT void setActivityBtNext(af_Code *bt_next, af_Activity *activity);
 
 /* LiteralData 释放函数 */
-void freeAllLiteralData(af_LiteralDataList *ld);
+AFUN_CORE_NO_EXPORT void freeAllLiteralData(af_LiteralDataList *ld);
 
 /* LiteralData 操作函数 */
-void pushLiteralData(char *data, af_Environment *env);
-bool checkLiteralCode(char *literal, char **func, bool *in_protect, af_Environment *env);
+AFUN_CORE_NO_EXPORT void pushLiteralData(char *data, af_Environment *env);
+AFUN_CORE_NO_EXPORT bool checkLiteralCode(char *literal, char **func, bool *in_protect, af_Environment *env);
 
 /* 顶层消息处理器 处理函数 */
-void runTopMessageProcess(bool is_gc, af_Environment *env);
+AFUN_CORE_NO_EXPORT void runTopMessageProcess(bool is_gc, af_Environment *env);
 
 #endif //AFUN_ENV_H_

+ 1 - 1
src/core/__func.h

@@ -60,6 +60,6 @@ struct af_FuncInfo {
 };
 
 /* FuncInfo 操作函数 */
-bool pushDynamicFuncBody(af_FuncBody *new, af_FuncBody *body);
+AFUN_CORE_NO_EXPORT bool pushDynamicFuncBody(af_FuncBody *new, af_FuncBody *body);
 
 #endif //AFUN_FUNC_H_

+ 11 - 11
src/core/__gc.h

@@ -92,24 +92,24 @@ struct gc_DestructList {
                                af_VarSpace *: gc_delVarSpaceReference))(obj))
 
 /* gc 对象新增函数 : 涉及af_ObjectData 不对外公开 */
-void gc_addObjectData(struct af_ObjectData *obj, af_Environment *env);
+AFUN_CORE_NO_EXPORT void gc_addObjectData(struct af_ObjectData *obj, af_Environment *env);
 
 /* gc Reference 管理函数 : 涉及af_ObjectData 不对外公开 */
-void gc_addObjectDataReference(af_ObjectData *obj);
-void gc_delObjectDataReference(af_ObjectData *obj);
+AFUN_CORE_NO_EXPORT void gc_addObjectDataReference(af_ObjectData *obj);
+AFUN_CORE_NO_EXPORT void gc_delObjectDataReference(af_ObjectData *obj);
 
 /* gc 对象新增函数 : 涉及af_Core不对外公开 */
-void gc_addObjectDataByCore(struct af_ObjectData *obj, af_Core *core);
-void gc_addObjectByCore(struct af_Object *obj, af_Core *core);
-void gc_addVarByCore(struct af_Var *obj, af_Core *core);
-void gc_addVarSpaceByCore(struct af_VarSpace *obj, af_Core *core);
+AFUN_CORE_NO_EXPORT void gc_addObjectDataByCore(struct af_ObjectData *obj, af_Core *core);
+AFUN_CORE_NO_EXPORT void gc_addObjectByCore(struct af_Object *obj, af_Core *core);
+AFUN_CORE_NO_EXPORT void gc_addVarByCore(struct af_Var *obj, af_Core *core);
+AFUN_CORE_NO_EXPORT void gc_addVarSpaceByCore(struct af_VarSpace *obj, af_Core *core);
 
 /* gc 操控函数 : gc的启动由解释器完全管理 */
-void gc_RunGC(af_Environment *env);
-pgc_DestructList checkAllDestruct(af_Environment *env, pgc_DestructList pdl);
-void gc_freeAllValue(af_Environment *env);
+AFUN_CORE_NO_EXPORT void gc_RunGC(af_Environment *env);
+AFUN_CORE_NO_EXPORT pgc_DestructList checkAllDestruct(af_Environment *env, pgc_DestructList pdl);
+AFUN_CORE_NO_EXPORT void gc_freeAllValue(af_Environment *env);
 
 /* gc 信息函数 */
-void printGCByCode(af_Core *core);
+AFUN_CORE_NO_EXPORT void printGCByCode(af_Core *core);
 
 #endif //AFUN_GC_H_

+ 1 - 1
src/core/__global_obj.h

@@ -1,6 +1,6 @@
 #ifndef AFUN_GLOBAL_OBJ_H_
 #define AFUN_GLOBAL_OBJ_H_
 
-af_Object *makeGlobalObject(af_Environment *env);
+AFUN_CORE_NO_EXPORT af_Object *makeGlobalObject(af_Environment *env);
 
 #endif //AFUN_GLOBAL_OBJ_H_

+ 3 - 3
src/core/__object.h

@@ -60,12 +60,12 @@ struct af_Inherit {
 };
 
 /* ObjectData 属性获取函数 */
-af_Object *findObjectAttributesByObjectData(char *name, af_Object *visitor, af_ObjectData *od);
+AFUN_CORE_NO_EXPORT af_Object *findObjectAttributesByObjectData(char *name, af_Object *visitor, af_ObjectData *od);
 
 /* ObjectData 释放函数 */
-void freeObjectData(af_ObjectData *od, af_Environment *env);
+AFUN_CORE_NO_EXPORT void freeObjectData(af_ObjectData *od, af_Environment *env);
 
 /* Object 释放函数 */
-void freeObjectByCore(af_Object *obj, af_Core *core);
+AFUN_CORE_NO_EXPORT void freeObjectByCore(af_Object *obj, af_Core *core);
 
 #endif //AFUN_OBJECT_H_

+ 7 - 6
src/core/__reader.h

@@ -1,6 +1,7 @@
 #ifndef AFUN_READER_H_
 #define AFUN_READER_H_
 #include <stdio.h>
+#include "aFunCoreExport.h"  // reader.h 不包含 aFunCoreExport.h
 #include "tool.h"
 #include "reader.h"
 
@@ -31,15 +32,15 @@ struct af_Reader {
 };
 
 /* Reader 创建与释放 */
-af_Reader *makeReader(DLC_SYMBOL(readerFunc) read_func, DLC_SYMBOL(destructReaderFunc) destruct_func, size_t data_size);
-void freeReader(af_Reader *reader);
+AFUN_CORE_NO_EXPORT af_Reader *makeReader(DLC_SYMBOL(readerFunc) read_func, DLC_SYMBOL(destructReaderFunc) destruct_func, size_t data_size);
+AFUN_CORE_NO_EXPORT void freeReader(af_Reader *reader);
 
 /* Reader 初始化函数 */
-af_Reader *initReader(af_Reader *reader);
+AFUN_CORE_NO_EXPORT af_Reader *initReader(af_Reader *reader);
 
 /* Reader 操作哈桑 */
-char *readWord(size_t del_index, af_Reader *reader);
-char getChar(af_Reader *reader);
-void *getReaderData(af_Reader *reader);
+AFUN_CORE_NO_EXPORT char *readWord(size_t del_index, af_Reader *reader);
+AFUN_CORE_NO_EXPORT char getChar(af_Reader *reader);
+AFUN_CORE_NO_EXPORT void *getReaderData(af_Reader *reader);
 
 #endif //AFUN_READER_H_

+ 4 - 4
src/core/__var.h

@@ -42,11 +42,11 @@ struct af_VarSpaceListNode {  // 变量链
 };
 
 /* 变量空间创建与释放 */
-af_VarSpace *makeVarSpaceByCore(af_Object *belong, af_Core *core);
-void freeVarSpaceByCore(af_VarSpace *vs, af_Core *core);
+AFUN_CORE_NO_EXPORT af_VarSpace *makeVarSpaceByCore(af_Object *belong, af_Core *core);
+AFUN_CORE_NO_EXPORT void freeVarSpaceByCore(af_VarSpace *vs, af_Core *core);
 
 /* 变量创建与释放 */
-af_Var *makeVarByCore(char *name, char p_self, char p_posterity, char p_external, af_Object *obj, af_Core *core);
-void freeVarByCore(af_Var *var, af_Core *core);
+AFUN_CORE_NO_EXPORT af_Var *makeVarByCore(char *name, char p_self, char p_posterity, char p_external, af_Object *obj, af_Core *core);
+AFUN_CORE_NO_EXPORT void freeVarByCore(af_Var *var, af_Core *core);
 
 #endif //AFUN_VAR_H_

+ 3 - 2
src/core/init.c → src/core/core_init.c

@@ -1,10 +1,11 @@
 /*
- * 文件名: init.c
+ * 文件名: core_init.c
  * 目标: 初始化函数
  */
 
+#include "core_init.h"
 #include "tool.h"
 
-void aFunInit(void) {
+void aFunCoreInit(void) {
     getEndian();
 }

+ 1 - 1
src/main.c

@@ -365,7 +365,7 @@ bool infixFunc(af_Object *obj) {
 }
 
 int main() {
-    aFunInit();
+    aFunCoreInit();
     printf("Hello World\n");
 
     af_Environment *env = makeEnvironment(grt_always);

+ 0 - 2
test/export/export.cmake

@@ -21,5 +21,3 @@ set_test_label(export export-test export-install)
 set_tests_properties(export-install PROPERTIES FIXTURES_SETUP "export")  # 添加测试固件
 set_tests_properties(export-mkdir PROPERTIES FIXTURES_SETUP "export")  # 添加测试固件
 set_tests_properties(export-test PROPERTIES FIXTURES_REQUIRED "export")
-
-message(STATUS "CMAKE_COMMAND = ${CMAKE_COMMAND}")

+ 1 - 1
test/export/main.c

@@ -365,7 +365,7 @@ bool infixFunc(af_Object *obj) {
 }
 
 int main() {
-    aFunInit();
+    aFunCoreInit();
     printf("Hello World\n");
 
     af_Environment *env = makeEnvironment(grt_always);

+ 1 - 1
test/src/CMakeLists.txt

@@ -4,7 +4,7 @@
 foreach(src IN LISTS src_list)
     cmake_path(GET src STEM file_name)
     add_executable(${file_name} ${src})
-    target_link_libraries(${file_name} core-shared-t)
+    target_link_libraries(${file_name} core-static-s)  # 链接静态库 (导出所有符号)
     set_target_properties(${file_name}
                           PROPERTIES OUTPUT_NAME "test_${file_name}")
     unset(file_name)

+ 1 - 1
test/src/env_init.c

@@ -39,7 +39,7 @@ af_VarSpace *getShareVS(af_Object *obj) {
 }
 
 int main() {
-    aFunInit();
+    aFunCoreInit();
 
     af_Environment *env = makeEnvironment(grt_always);
     {

+ 1 - 1
test/src/run_code.c

@@ -365,7 +365,7 @@ bool infixFunc(af_Object *obj) {
 }
 
 int main() {
-    aFunInit();
+    aFunCoreInit();
     printf("Hello World\n");
 
     af_Environment *env = makeEnvironment(grt_always);