qt添加so庫時出現不可兼容錯誤

問題描述:

錯誤提示::-1: 錯誤:skipping incompatible /usr/local/lib/libzzm.so when searching for -lzzm

.pro文件如下:

#-------------------------------------------------

#

# Project created by QtCreator 2013-08-27T17:47:32

#

#-------------------------------------------------

 

QT       += core gui

 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

 

TARGET = ImageProcess

TEMPLATE = app

 

 

SOURCES += main.cpp\

        mainwindow.cpp \

    bmpimage.cpp \

    imagewidget.cpp \

    imageprocess.cpp \

    DecodeImagePrepare.cpp

 

HEADERS  += mainwindow.h \

    bmpimage.h \

    imagewidget.h \

    imageprocess.h \

    DecodeImagePrepare.h \

    /usr/local/lib ZDecode.h

 

FORMS    += mainwindow.ui

 

LIBS += -L/usr/local/lib -lzzm

並且在用的地方添加了頭文件。

 

分析問題:

開始認爲是 LIBS += -L/usr/local/lib -lzzm 語句存在問題,結果無論怎麼修改該語句都存在問題。修改過的形式如下:

LIBS += -L/usr/local/lib -l   zzm

LIBS += -L  /usr/local/lib  -lzzm

修改libzzm.so放置的位置,並將該.so文件放置到了相應的目錄下:

LIBS += -L ./ -lzzm              當前可執行文件的目錄

LIBS += -L/usr/lib -lzzm

開始懷疑是不是別人提供的.so文件存在問題。

 

後來我自己寫了個方法,實現如下:

hello.c

 

#include<stdio.h>

int hello()

{

    printf("hello world!\n");

    int a = 5, b = 3;

     return a + b;

}

產生.so文件,命令如下:

查看得到的.so文件:

將.so文件拷貝到可執行文件所在的目錄下:

調用的main.c文件如下:


#include <QApplication>
#include <QImage>
#include <complex>
#include <QPainter>
#include <QWidget>
#include <QtGui/QLabel>
#include <QPushButton>
#include <QLibrary>

extern "C"
{int hello();}

using namespace std;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    int sum = 0;
    sum = hello();

    return a.exec();
}

 

工程的.pro文件內容如下

#-------------------------------------------------
#
# Project created by QtCreator 2013-08-27T17:47:32
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = ImageProcess
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    bmpimage.cpp \
    imagewidget.cpp \
    imageprocess.cpp \
    DecodeImagePrepare.cpp

HEADERS  += mainwindow.h \
    bmpimage.h \
    imagewidget.h \
    imageprocess.h \
    DecodeImagePrepare.h \
    ZDecode.h

FORMS    += mainwindow.ui

LIBS += -L ./ -lhello

 

編譯後,鏈接成功!

運行結果:


 

擴展:

方法二,在程序中加載動態庫

    QLibrary pZcodeLib("/width/app/ImageProcess/libhello.so");
    bool isload = pZcodeLib.load();
    if(!isload)
    {
        return 0;
    }

    int ret = 0;
    typedef int (*Fun)();
    Fun decode = (Fun)pZcodeLib.resolve("hello");
    if (decode)
    {
        // 解碼
        ret = decode();
    }

 

參考文章:

1、http://blog.csdn.net/binghehjbenben/article/details/7693714

2、http://www.cnblogs.com/qyddbear/archive/2012/09/12/2682119.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章