Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 从共享库依赖项中删除版本号_Cmake - Fatal编程技术网

Cmake 从共享库依赖项中删除版本号

Cmake 从共享库依赖项中删除版本号,cmake,Cmake,我有自己的项目-安全存储-和自己的OpenSSL包 接下来是openssl库: libcrypto.so libssl.so 我使用cmake构建我的项目。项目有几个依赖项,包括openssl LIB: target_link_libraries(${LIBRARY_NAME} PUBLIC my_static_lib ... crypto ssl ) 编译后,我的二进制文件具有下一个依赖项: ldd ./bin/security_storage libssl.so.1.1 => no

我有自己的项目-安全存储-和自己的OpenSSL包

接下来是openssl库:

  • libcrypto.so
  • libssl.so
  • 我使用cmake构建我的项目。项目有几个依赖项,包括openssl LIB:

    target_link_libraries(${LIBRARY_NAME} PUBLIC
    my_static_lib
    ...
    crypto
    ssl
    )
    
    编译后,我的二进制文件具有下一个依赖项:

    ldd ./bin/security_storage 
    libssl.so.1.1 => not found
    libcrypto.so.1.1 => not found
    

    但是没有版本为的共享库,因为我的OpenSSL库没有版本号。 如何从二进制依赖项中删除版本号?

    我解决了我的问题

    接下来的问题是:

  • 我从另一个文件夹复制openssl库
  • 源文件夹包含符号链接
  • 我只复制了没有库的符号链接
  • 没有库的符号链接引用到系统openssl库
    解决方案是从带有符号链接和libs的自定义openssl文件夹复制。

    为什么这个问题被标记为CMake?您在项目中使用了CMake吗?如果是这样,请将您的CMake代码添加到您的问题帖子中。感谢您的评论,添加有关CMake的信息“因为我的OpenSSL LIB没有版本号”-当链接到
    ssl
    库时,链接者认为您有这些版本化的文件。看起来您在非系统目录中安装了
    libssl.so
    ,但链接器使用的是系统范围内安装的
    libssl.so
    。在这种情况下,您可以尝试在链接库时将绝对路径传递给库。但是,如何禁用系统目录中的链接?我不能使用绝对路径,我的openssl库放在应用程序文件夹中“我不能使用绝对路径,我的openssl库放在应用程序文件夹中”-这不会改变任何东西。注意,链接器的路径和运行时加载程序的路径(RPATH)是不同的。一方拥有绝对路径并不意味着另一方拥有绝对路径。顺便问一下,你是如何获得你的
    libssl.so
    ?如果在创建时对其进行了版本控制,它仍然包含该信息。如果你想让这个库没有版本,那么你需要这样构建它。