【问题标题】:How to link with chart director library with mingw如何使用 mingw 与图表导演库链接
【发布时间】:2014-08-21 16:41:14
【问题描述】:

我正在尝试使用 Chart Director 在 mingw 下构建一个应用程序。我的代码编译得很好,但是我从链接器中得到了未定义的引用错误。

目标文件需要链接到../ChartDirector.cpp/lib/chartdir51.lib

我已将此文件重命名为 ../ChartDirector.cpp/lib/libchartdir51.a 如果我不这样做,链接器将找不到它。

结果是:

mingw32-g++.exe -LJ:\wxWidgets-3.0.1\lib\gcc481TDM_dll
   -L..\ChartDirector_cpp\lib -o ..\bin\plot.exe obj\Debug\plot.o  
   -lwxbase30u -lwxmsw30u_core -lchartdir51 -mwindows


obj\Debug\plot.o: In function `ZN3BoxC2EP11BoxInternal':
C:\Users\James\Documents\code\vase\plot/../ChartDirector_cpp/include/chartdir.h:804:
    undefined reference to `Box2DrawObj'
obj\Debug\plot.o: In function `ZN7TextBoxC1EP15TextBoxInternal':
C:\Users\James\Documents\code\vase\plot/../ChartDirector_cpp/include/chartdir.h:832:
    undefined reference to `TextBox2Box'
   ... and so on

为了让事情变得更简单,我改为尝试构建由 Chart Director 提供的 simplebar 演示应用程序。构建命令现在看起来像这样:

mingw32-g++.exe 
C:\Users\James\Documents\code\vase\test\simplebar.cpp
-IC:\Users\James\Documents\code\vase\ChartDirector_cpp\include
-o C:\Users\James\Documents\code\vase\bin\test.exe
-LC:\Users\James\Documents\code\vase\ChartDirector_cpp\lib\ 
-lchartdir51

我仍然有相同的未定义。

this recipe 之后,我创建了一个如下所示的 def 文件

EXPORTS
Box2DrawObj
TextBox2Box
CBaseChart_destroy
CBaseChart_makeChart
CAxis_setLabels
BarLayer2Layer
CXYChart_create
XYChart2BaseChart
CXYChart_xAxis
CXYChart_setPlotArea
CXYChart_addBarLayer

并使用 dlltool 创建一个新的 libchartdir51.a

dlltool -d C:\Users\James\Documents\code\vase\ChartDirector_cpp\lib\chartdir.def
 -l C:\Users\James\Documents\code\vase\ChartDirector_cpp\lib\libchartdir51.a

好吧,修复了我之前看到的未定义,但现在我得到了一些更神秘的东西:

C:\Users\James\Documents\code\vase\ChartDirector_cpp\lib/libchartdir51.a(diaybs00001.o):(.idata$7+0x
0):
undefined reference to `_head_C__Users_James_Documents_code_vase_ChartDirector_cpp_lib_libchartd
ir51_a'
C:\Users\James\Documents\code\vase\ChartDirector_cpp\lib/libchartdir51.a(diaybs00009.o):(.idata$7+0x
0): undefined reference to `_head_C__Users_James_Documents_code_vase_ChartDirector_cpp_lib_libchartd
ir51_a'
... and so on

我尝试下载chartdir 的linux 版本。结果是:

mingw32-g++.exe 
C:\Users\James\Downloads\ChartDirector\cppdemo\simplebar\simplebar.cpp
-IC:\Users\James\Downloads\ChartDirector\include
-o C:\Users\James\code\vase\bin\test.exe 
C:\Users\James\Downloads\ChartDirector\lib\libchartdir.so.5.1.0

C:\Users\James\Downloads\ChartDirector\lib\libchartdir.so.5.1.0: 
could not read symbols: File in wrong format
collect2.exe: error: ld returned 1 exit status

【问题讨论】:

    标签: g++ mingw chart-director


    【解决方案1】:

    问题是我试图在 32 位 mingw 上使用 64 位版本的 ChartDirector 进行构建。下载 32 位库可以解决问题:

    mingw32-g++ 
    C:\Users\James\Downloads\chartdir_cpp_win32\ChartDirector\cppdemo\simplebar\simplebar.cpp
    -IC:\Users\Jam es\Downloads\chartdir_cpp_win32\ChartDirector\include
    -o C:\Users\James\code\vase\bin\test2.exe
    -C:\Users\James\Downloads\chartdir_cpp_win32\ChartDirector\lib\chartdir51.dll
    

    【讨论】:

      【解决方案2】:

      当库不匹配时,通常会出现未定义的引用错误。始终从 ChartDirector 下载页面获取最新的库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-02
        • 2013-02-01
        相关资源
        最近更新 更多