大众信息网

C/C++编译问题,静态库,动态库。

答案:3  mip版
解决时间 2021-02-22 18:01
  • 提问者网友:妳螚鬧俄螚笑
  • 2021-02-22 08:15
现在在一个文件夹下面有动态库libtest.so, libalex.so, 有一个静态库libtest.a,我想编译main.c链接动态库libalex.so和静态库libalex.a,怎么做? 试过,不行的有: 1. g++ main.c -L./ -lalex -static -ltest (这样static是作用全局的,全用静态库) 2. g++ main.c -L./ -lalex -L./libtest.a (不行,找不到./libtest.a) 3. g++ main.c -L./ -Bdynamic -lalex -Bstatic -ltest (不行,全用动态库) 手误,我是想编译main.c链接动态库libalex.so和静态库libtest.a,请教!
最佳答案
  • 二级知识专家网友:烈酒℃灼言EL
  • 2021-02-22 08:50
g++ main.c -L. libalex.so -ltest
全部回答
  • 1楼网友:你瞎啊撞我心上來
  • 2021-02-22 10:18
的dll一起拷贝到别人电脑上去! 还有一些特别的情况,虽然是针对VC2005的,但是对VC6也有参考价值。 前面一些是我在网上找的,后面的有些是我自己现添加的,希望对你有帮助! 报错"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题" //------------------------------------------------------ 这个问题主要出现在XP环境下运行由Visual C++2003/2005编译的MFC程序时 问题现象是XP运行此类程序时,报错"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题" 这个问题似乎许多人遇见过.在CSDN和微软社区里面都有人提到.但是没有完整的解决方案 这个问题的解决一共会遇见2个子问题 最早出现这个错误我和许多人认为的一样 认为是缺乏DLL库文件导致.但是在测试机复制了DLL甚至安装了.net framework 2.0以后 都无法解决问题,最后确认不是由缺乏DLL所致 因为程序是纯win32的应用程,非托管代码,所以也无需.net framework Visual C++2003/2005默认的MFC程序是使用动态MFC库(Use MFC in a Shared DLL)来链接的 而动态MFC库使用的是Multi-threaded DLL (/MD) 由于XP对于PE文件格式监测更加严格. 就会导致部分使用多线程DLL的可执行文件在调用的时候出错 修改项目属性的编译开关 Project->Property->configuration Properties->C/C++->Code Generation->Runtime Library 修改成Multi-threaded (/MT) 修改了Runtime类型以后 需要将MFC的编译类型也改成静态库 Project->Property->configuration Properties->General->Use of MFC 修改成Use MFC in a Static Library 一部分情况下在这步就能解决问题 另外一部分情况会遇见如下情况 编译器报错 CODE: nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj) [Copy to clipboard] 产生这个问题的原因是库依赖关系 在Project->Property->configuration Properties->Linker->Command Line 加入编译开关/verbose:lib可以显示详细的库链接顺序 CODE: ------ Build started: Project: PerfMonDemo, Configuration: Release Win32 ------ Linking... Searching libraries Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib: nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj) Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib: Finished searching libraries Searching libraries Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcmt.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\kernel32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\user32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\gdi32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\msimg32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comdlg32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\winspool.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\advapi32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shell32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\comctl32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\shlwapi.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\uuid.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oledlg.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ole32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleaut32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\urlmon.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\OLDNAMES.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\atls.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\ws2_32.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\mswsock.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\oleacc.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib\pdh.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\DelayImp.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\lib\libcpmt.lib: Searching d:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\nafxcw.lib: Finished searching libraries .\Release/PerfMonDemo.exe : fatal error LNK1169: one or more multiply defined symbols found Build log was saved at "file://d:\Dev\Performance Monitor\Release\BuildLog.htm" PerfMonDemo - 2 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== [Copy to clipboard] 我们发现在libcpmt.lib声明过的operator new在nafxcw.lib中再次定义 解决方法如下 Project->Property->configuration Properties->Linker->Input->Additional Dependencies 加入 nafxcw.lib libcpmt.lib Project->Property->configuration Properties->Linker->Input->Ignore Specific Library 加入 nafxcw.lib libcpmt.lib 这样链接程序就不会先按照默认顺序来连接这两个库文件 而是在最后在加入对他们的引用.这样就避免了这个问题 下面是一张可能发生冲突的列表 若要使用此运行时库 请忽略这些库 单线程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 多线程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 使用 DLL 的多线程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 调试单线程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib 调试多线程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib 使用 DLL 的调试多线程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib //本人曾经对上面的方法进行测试,修改后可能出现XX无法解析的情况,请大家使用MSDN查找该函数,并且找到该函数对应的lib库文件。将其添加到附加依赖项或者是用#pragma comment(lib,"xxx.lib")将其添加到代码中! 另外,站长团上有产品团购,便宜有保证
  • 2楼网友:三虚那逝的流年
  • 2021-02-22 09:53
g++ main.c -L./ -lalex -ltest
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯