ubuntu 下QT4链接C语言编写的.a静态库

    很久没有使用QT进行开发了,大概有3-4年了。一个ubuntu下的小项目,让我重新使用QT进行开发。

    用C语言写了一个静态库文件.a文件,准备在QT4下进行链接使用。我在pro工程配置文件中增加LIBS的配置,使用各种方法进行倒腾,不是提示找不到库文件,就是提示某些函数链接错误,其实就是.a文件没有进行链接到。查了网络资料,试了几种办法也没有解决该问题。

     最后无奈之下,没有办法,查看QT的工程编译目录下的Makefile文件,感觉应该是由于搜索目录的问题。干脆暴力解决吧,直接使用写死的完整路径进行链接,运行发现OK。

    LIBS += /home/zzf/qt_project/test/lib/QT_Test.a

    由于QT是C++,要链接C语言的库函数,包含.a文件需要的头文件的时候记得要添加 extern "C"使用C语言方式函数链接,如下

     extern "C" 

    { 

       #include "QT_Test.h"

    }


    正常情况下使用-L 和 -l 命令应该就可以链接到的,qt4下就各种不行,通过写死路径虽然解决了链接问题。但是后续拷贝工程和库文件带来不方便,工程路径变更就得重新更改.a链接路径。谁有解决办法呢???烦请告知下,不胜感激涕零。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Ubuntu环境下使用C语言编写Kittler阈值分割算法的步骤如下: 1. 安装OpenCV 在终端中输入以下命令: ``` sudo apt-get install libopencv-dev ``` 2. 创建工程 在终端中创建一个新目录,并在该目录下创建一个名为`kittler_thresholding.c`的C文件: ``` mkdir kittler_thresholding cd kittler_thresholding touch kittler_thresholding.c ``` 3. 编写代码 在`kittler_thresholding.c`文件中编写以下代码: ```c #include <stdio.h> #include <stdlib.h> #include <opencv2/opencv.hpp> using namespace cv; int main(int argc, char** argv) { if (argc != 2) { printf("Usage: %s <image_path>\n", argv[0]); return -1; } // 读取灰度图像 Mat img = imread(argv[1], IMREAD_GRAYSCALE); // 计算直方图 int histSize = 256; float range[] = { 0, 256 }; const float* histRange = { range }; Mat hist; calcHist(&img, 1, 0, Mat(), hist, 1, &histSize, &histRange, true, false); // 初始化最小方差为正无穷 double min_var = std::numeric_limits<double>::infinity(); int threshold = 0; // 遍历所有阈值,计算方差 for (int t = 0; t < 256; t++) { // 计算类别1的权重与均值 double w1 = cv::sum(hist.rowRange(0, t+1))[0]; if (w1 == 0) continue; double mu1 = cv::sum(hist.rowRange(0, t+1).mul(cv::Mat::ones(1, t+1, CV_32F) * cv::Mat_<float>(range)))[0] / w1; // 计算类别2的权重与均值 double w2 = cv::sum(hist.rowRange(t+1, histSize))[0]; if (w2 == 0) continue; double mu2 = cv::sum(hist.rowRange(t+1, histSize).mul(cv::Mat::ones(1, histSize-t-1, CV_32F) * cv::Mat_<float>(range+t+1)))[0] / w2; // 计算类别1和类别2的方差之和 double var = w1 * w2 * pow(mu1 - mu2, 2); // 更新最小方差和阈值 if (var < min_var) { min_var = var; threshold = t; } } // 二值化图像 Mat binary; threshold(img, binary, threshold, 255, THRESH_BINARY); // 显示结果 namedWindow("Original Image", WINDOW_AUTOSIZE); imshow("Original Image", img); namedWindow("Binary Image", WINDOW_AUTOSIZE); imshow("Binary Image", binary); waitKey(0); return 0; } ``` 4. 编译和运行 在终端中输入以下命令编译程序: ``` g++ -o kittler_thresholding kittler_thresholding.c `pkg-config --cflags --libs opencv` ``` 然后在终端中运行以下命令: ``` ./kittler_thresholding image.jpg ``` 程序会读取`image.jpg`图像并进行Kittler阈值分割,将结果显示出来。 以上是在Ubuntu环境下使用C语言编写Kittler阈值分割算法的步骤,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值