# dup_symbol_test **Repository Path**: misc_projects/dup_symbol_test ## Basic Information - **Project Name**: dup_symbol_test - **Description**: Test loading duplicate symbols in multi-DSOs, the symbols could be functions, global variables. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-26 - **Last Updated**: 2025-03-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # duplicate symbols test # `APP`加载的多个`DSO`,如果存在重复的符号,则只加载第一个遇到的符号。规则适合于包括函数,全局变量。 加载顺序,由链接顺序,以及环境变量定义lib路径优先级,如`RPATH`,`LD_LIBRARY_PATH`。路径搜索优先级为:`RPATH` > `LD_LIBRARY_PATH` > `ld.so.cache`。 ## 1. RPATH ## 编译期间,设定`RPATH`,如`cmake`脚步设置如下: ```cmake set_target_properties(${target_name} PROPERTIES LINK_FLAGS "-Wl,-rpath='$ORIGIN' ") ``` 如果存在间接依赖,则也优先使用`RPATH`设定的路径进行搜索。 ### 1.1. ORIGIN 占位符 ### `$ORIGIN`是一个特殊的占位符,代表可执行文件或库文件自身的目录,当设置为`$ORIGIN`时,它告诉动态链接器在可执行文件或库所在的同一目录下查找依赖的库。 ## 2. 调试lib加载--LD_DEBUG ## 设置环境变量`LD_DEBUG`使能系统级加载信息: ```bash LD_DEBUG=libs ./test_app ``` ## 参考链接 ## * [Linux运行时动态库搜索路径优先级](https://www.cnblogs.com/ForestCherry/p/18497797)