qt添加so库时出现不可兼容错误
来源:互联网 发布:济南程序员工资 编辑:程序博客网 时间:2024/05/01 19:11
问题描述:
错误提示::-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
- qt添加so库时出现不可兼容错误
- QT 找不到***.so.1错误
- C++ 使用动态链接库xx.so 时出现undefined reference错误
- Java jni 加载 so 时,出现 undefined symbol 错误
- Qt项目移动时出现的错误
- 使用qt时出现找不到模块错误
- 用文本文档编辑java出现,编译时出现错误:编码GBK出现不可映射字符
- Qt 程序出现错误
- Qt 错误出现记录
- QT出现错误 解决方案
- widget添加后出现不可点击
- 关于添加Fragment时出现界面错误
- xmlhttp出现“数据还不可使用”错误
- xmlhttp出现“数据还不可使用”错误
- Androidstudio 添加so库
- CMake 包含了头文件 找到了so动态库 链接时仍然出现undefined reference to 错误
- so库相关错误
- qt中MainWindow出现错误
- Ubuntu Grub Rescue 解决Windows分区导致Ubuntu 12.10无法启动的问题
- UVa:907 Winterim Backpacking Trip
- Java7中的switch支持String的实现细节
- mysql反向解析导致连接数据库过慢的问题
- javascript 学习笔记
- qt添加so库时出现不可兼容错误
- 2014迅雷校园招聘笔试题答案
- 记事本里打“联通”为什么会变成乱码?
- 内存段的归纳
- 字符串匹配常用算法
- 博客搬家了
- Graphical Editor
- Exercises 4.3 E2
- 什么是伪静态、动态、静态页面