相关疑难解决方法(0)

VisualStudio和gcc之间*.dll*.a*.lib*.def的兼容性

这非常令人困惑.我花了很多时间在堆栈上阅读帖子,等等.仍然困惑.

我正在使用Qt和C++进行编码.在Qt中,我使用gcc选项编译器.
问题是我尝试过的许多第三方库似乎都不起作用.

我是.dll,.a,.lib,.def文件和库方案的新手.

问题1:

在我有限的经验中(到目前为止我已经尝试了7或9个库),图书馆的供应商很少告诉你.dll是用VisualStudio还是用gcc制作的.这增加了很多困惑.他们几乎从不清楚库兼容的编译器.所以我很欣赏一些如何应对这场噩梦的真实生活技巧.我尝试过的几乎所有库都是OpenSource项目.我不会在这里命名,但这些都是众所周知的项目.我确定问题是我缺乏知识......

MinGW和gcc World

问题2:
据我所知,MinGW gcc Universe的动态C++库需要这些,对吧?
*.h
*.dll
*.a

问题3:
不幸的是,.a文件经常丢失,库不起作用.这非常令人困惑.如果.a文件丢失,我运气不好?

问题4:
如果*.dll是用gcc制作的,我可以为MinGW/gcc生成.a文件吗?

问题5:如果*.dll是用VisualStudio制作的,我可以为MinGW/gcc生成.a文件吗?

问题6:
*.dll(由MinGW/gcc制作)是否太旧而且不再与较新的MinGW/gcc兼容?

问题7:
使用MinGW/gcc的Qt项目从不需要*.lib文件,对吗?那只是VisualStudio的一件事,对吧?

问题8:
我不需要*.def文件在使用MinGW/gcc的Qt项目中使用*.dll,对吗?

VisualStudio世界

问题9:
据我所知,VisualStudio的动态C++库需要这些:
*.h
*.dll
*.lib

对?同样,问题是*.lib文件几乎总是丢失.此外,没有关于库兼容的编译器的明确说明.那么我怎么知道它只适用于VisualStudio呢?

问题10:
如果缺少.lib文件,我运气不好?

问题11:
如果*.dll是用VisualStudio制作的,我可以为VisualStudio生成.lib文件吗?怎么样?

问题12:
如果*.dll是用MinGW/gcc制作的,我可以为VisualStudio生成.lib文件吗?怎么样?

问题13:
*.dll(使用VisualStudio制作)是否可能太旧并且不再与较新的VisualStudio兼容?

问题14:
如果在QtCreator中我选择了VisualStudio编译器,是否与其他人使用REAL VisualStudio编译的动态库100%兼容?我相信Qt Creator中的VisualStudio编译器选项是伪造的VisualStudio编译器.

问题15:
如果在QtCreator中我选择MinGW/gcc编译器,我可以使用其他人使用REAL VisualStudio编译的Qt动态库吗?

问题16:
我不需要*.def文件在使用MinGW/gcc的Qt项目中使用*.dll,对吗?

问题17:我可以将使用REAL VisualStudio制作的*lib(使用*.dll和*.h)文件转换为*.a文件,这样我就可以将*.a文件与未修改的*.dll一起使用,并且Qt gcc项目中的*.h文件?

c++ qt gcc mingw visual-c++

21
推荐指数
3
解决办法
2万
查看次数

Windows上的cmake链接共享库

有3个文件[ mc,mh,main.c ].

MH

// m.h
int m();
Run Code Online (Sandbox Code Playgroud)

MC

// m.c
#include <stdio.h>
#include "m.h"

int m(){
    printf("Hello,m!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

main.c中

// main.c
#include "m.h"
int main(){
    return m();
}
Run Code Online (Sandbox Code Playgroud)

虽然我更喜欢共享库(m.dll),但我已经制作了CMakeLists.txt

    PROJECT("app1")
    ADD_LIBRARY(m SHARED m.c)
    ADD_EXECUTABLE(myexe main.c)
    TARGET_LINK_LIBRARIES(myexe m)
Run Code Online (Sandbox Code Playgroud)

完成CMake配置并完成生成.打开app1.sln并使用Visual Studio构建,它崩溃了

LNK1104:Can't open file "Debug\m.lib"
Run Code Online (Sandbox Code Playgroud)

它只能是静态ADD_LIBRARY().为什么它不适用于Windows?

如果我有另一个共享库(mylib.dll),我如何在main.c和CMakeLists.txt文件中调用它的函数?

windows build cmake

10
推荐指数
3
解决办法
1万
查看次数

标签 统计

build ×1

c++ ×1

cmake ×1

gcc ×1

mingw ×1

qt ×1

visual-c++ ×1

windows ×1