gpt4 book ai didi

dll - 具有 CMake 3 和共享库的 Visual Studio Express 12 (2013) 提供 LNK1104 错误

转载 作者:行者123 更新时间:2023-12-03 03:36:06 24 4
gpt4 key购买 nike

我有以下 CMakeLists.txt

project(testproject)
cmake_minimum_required(VERSION 2.8.4)

add_library(library lib.cpp)

add_executable(test.x main.cpp)
target_link_libraries(test.x library)

如果我使用 Visual Studio 构建一个项目

cmake path\to\project

然后在 Visual Studio Express 12 中打开解决方案我没有任何问题。但是,如果我用

构建项目
cmake -DBUILD_SHARED_LIBS=ON path\to\project

然后我在 Visual Studio 中收到以下错误:

LINK : fatal error LNK1104: cannot open file 'Debug\library.lib'

这似乎是因为,根据我的指定,Visual Studio 构建了文件“Debug\library.dll”

如果我构建 Linux makefile,一切都会正常。

那么...知道为什么 Visual Studio 仍在寻找静态库吗?这是一个 cmake 错误,还是我做的什么?

我在 Windows 端开发方面经验不是很丰富,因此我将不胜感激您提供的任何帮助。谢谢!

最佳答案

这可能是因为您没有“导出”任何东西。

示例

如果您创建库foo:

add_library(foo foo.cpp foo.hpp)

CMake 将为您提供 foo_EXPORTS 宏,以防共享库正在构建:

cl /c ... /D foo_EXPORTS

您可以使用此宏来声明您的函数,如下所示:

// foo.hpp
#if defined(_WIN32)
# if defined(foo_EXPORTS)
# define FOO_EXPORT __declspec(dllexport)
# else
# define FOO_EXPORT __declspec(dllimport)
# endif // Foo_EXPORTS
#else // _WIN32
# define FOO_EXPORT
#endif

FOO_EXPORT int foo();

更新

可以使用 GenerateExportHeader 自动生成 header 模块:

// foo.hpp
#include "foo_export.h" // foo_export.h is generated for you
FOO_EXPORT int foo();

# CMakeLists.txt
include(GenerateExportHeader) # include module with function `generate_export_header`
include_directories("${PROJECT_BINARY_DIR}") # this is the default directory for generated header, i.e. location of generated file `${PROJECT_BINARY_DIR}/foo_export.h`

add_library(foo foo.cpp foo.hpp)
generate_export_header(foo) # create `foo_export.h`

关于dll - 具有 CMake 3 和共享库的 Visual Studio Express 12 (2013) 提供 LNK1104 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com