4

我正在尝试使用 Chilkat C++ 库进行加密分配,但我似乎无法让库正确链接。截至目前,编译器无法找到头文件 CkRsa.h。我花了几个小时在互联网上搜索解决方案无济于事。这是我到目前为止所拥有的(这都是在 Mac OS X 环境中):

lib 文件安装在 /users/Adam/Desktop/chilkat/libDyn 和头文件在 /users/Adam/Desktop/chilkat/include 这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 3.6)
project(SocketEncryption)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)

add_library(chilkat STATIC IMPORTED)
set_property(
        TARGET chilkat
        PROPERTY
        IMPORTED_LOCATION "/users/Adam/Desktop/chilkat/libDyn/libchilkat_x86_64.dylib"
        INTERFACE_INCLUDE_DIRECTORIES "/users/Adam/Desktop/chilkat/include"
)
add_executable(SocketEncryption ${SOURCE_FILES})

target_link_libraries(SocketEncryption chilkat)

这是我的 main.cpp

#include <iostream>
#include <CkRsa.h>
//#include <CkPrivateKey.h>
//#include <CkSocket.h>

int main() {
    CkRsa alice;
    CkRsa bob;

    // Key Generation
    bool success = alice.GenerateKey(1024);
    const char *alicePublicKey = alice.exportPublicKey();
    const char *alicePrivateKey = alice.exportPrivateKey();
    const char *aliceMessage = "Hi, Bob. How are you?";

    // Encryption Step
    std::cout << "Encryption started." << std::endl;
    CkRsa rsaEncryptor;
    rsaEncryptor.put_EncodingMode("hex");
    success = rsaEncryptor.ImportPublicKey(alicePublicKey);
    bool usePrivateKey = false;
    const char * ciphertext = rsaEncryptor.encryptStringENC(aliceMessage, success);
    std::cout << ciphertext << std::endl;


    return 0;
}
4

2 回答 2

1

像这样更改您的代码(引用):

include_directories("/users/Adam/Desktop/chilkat/include")
link_directories("/users/Adam/Desktop/chilkat/libDyn")
于 2017-03-29T06:53:23.760 回答
1

我认为这只是您如何订购电话的简单问题。CMake 会按顺序解析其脚本。所以include_directories()调用必须放在add_executable()调用之前:

include_directories("/users/Adam/Desktop/chilkat/include")
add_executable(SocketEncryption ${SOURCE_FILES})

自 CMake 2.8.12 以来更好的方法是让库传播其头文件路径:

target_include_directories(chilkat PUBLIC "/users/Adam/Desktop/chilkat/include")

或者 - 为了便于阅读 - 通过目标属性直接添加它:

set_property(
    TARGET chilkat 
    PROPERTY 
        IMPORTED_LOCATION "/users/Adam/Desktop/chilkat/libDyn/libchilkat_x86_64.dylib"
        INTERFACE_INCLUDE_DIRECTORIES "/users/Adam/Desktop/chilkat/include"
)

另请参阅CMake:创建可重定位包

参考

于 2017-03-29T10:25:09.723 回答