C++ 使用g+链接到外部库+;

C++ 使用g+链接到外部库+;,c++,c,gcc,g++,C++,C,Gcc,G++,我下载了,我想编译代码。不幸的是,构建脚本应该与VisualStudioC编译器一起工作,但我不能在我的机器上安装/使用它。因此,我尝试修改脚本(以及部分代码),以便能够使用GCC编译它。但我对编译复杂代码是完全陌生的(我通常只使用gcc*.c-o outfile.exe) 我的问题是: 在某些文件中,有一个与 #pragma comment(lib, "libxml2.lib") 这不适用于GCC 可以在。\shared\parser\libxml2.lib 头文件位于。\shared\p

我下载了,我想编译代码。不幸的是,构建脚本应该与VisualStudioC编译器一起工作,但我不能在我的机器上安装/使用它。因此,我尝试修改脚本(以及部分代码),以便能够使用GCC编译它。但我对编译复杂代码是完全陌生的(我通常只使用gcc*.c-o outfile.exe)

我的问题是: 在某些文件中,有一个与

 #pragma comment(lib, "libxml2.lib")
这不适用于GCC

可以在
。\shared\parser\libxml2.lib
头文件位于
。\shared\parser\libxml\

我使用

fmusdk\fmu20\src\co_simulation>..\build_fmusim_cs_gcc.bat
脚本如下所示:

set SRC=main.c ..\shared\sim_support.c ..\shared\xmlVersionParser.c ..\shared\parser\XmlParser.cpp ..\shared\parser\XmlElement.cpp ..\shared\parser\XmlParserCApi.cpp
set INC=-I ..\shared\include -I ..\shared -I ..\shared\parser\libxml -I ..\shared\parser 
set LIB=-L ..\shared\include -L ..\shared -L ..\shared\parser\libxml -L ..\shared\parser 
set OPTIONS=-D FMI_COSIMULATION -D STANDALONE_XML_PARSER -D LIBXML_STATIC -v

g++ %INC% %OPTIONS% %SRC% %LIB% -lxml2 -o fmu20sim_cs.exe 
但我收到以下错误消息:

c:/users/<username>/userprograms/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lxml2
c:/users//userprograms/mingw/bin/./lib/gcc/mingw32/6.3.0/../../../../../../mingw32/bin/ld.exe:找不到-lxml2
我试着用我在上面找到的东西,但我似乎不起作用

有人能帮忙吗?我做错了什么?在INC和LIB下,我把所有看起来有用的东西都放进去了,但我不知道我到底在做什么

我还有一个日志文件,其中包含批处理文件的详细输出。但我不知道如何上传到这里:(

致以最良好的祝愿,
Martin

您应该将
-lxml2
替换为
-llibxml2

解释,来自:

还要注意的是,库名
“lib.a”
“lib.lib”
并不等同;如果您有一个库是根据异常的
“lib.lib”
约定命名的,那么它将不会被
“-l”
规范找到——如果您无法重命名库,则必须使用
“-llib”
格式


libxml2.lib
是(相当频繁)混淆库名约定的例子。Visual Studio使用添加
.lib
扩展名的约定(这将是
xml2.lib
),GCC使用添加
lib
前缀和
.a
扩展名的约定(这将是
libxml2.a

根据GCC手册(),您有两种选择:

  • 将库文件名更改为
    libxml2.a
    ,因为当给定
    -lxml2
    选项时,GCC正在查找该文件名。 链接器搜索库的标准目录列表,实际上是一个名为liblibrary.a的文件

  • 提供库文件的全名,不带
    -l
    (例如,在g++命令行中将
    -lxml2
    更改为
    libxml2.lib
    ),然后GCC将精确查找给定名称。 不以特殊识别后缀结尾的文件名被视为对象文件或库的名称。(链接器根据文件内容将对象文件与库区分开来。)如果链接完成,这些对象文件将用作链接器的输入


  • 我认为您的系统上也必须安装了xml2库。可能作为另一个依赖项,首先尝试安装libxml2。但该库已经存在。我还应该做什么?确定吗?您是如何检查的?我不是指您在脚本中提到的那个库(即libxml),如果您确定,那么您可以使用fullpath-Lpath/to/xml2Tried this?:“有关FMU SDK的错误报告、问题或评论,请发送至fmu@QTronic.de.“(我只是从您提供的链接中复制了它。)我将使用选项-llibxml2,因此如果有一天我可以得到它,那么lib仍然可以与VS一起使用。