zoukankan      html  css  js  c++  java
  • 完美编译运行PCRE on Windows , Solved the __imp__pcre_exec __imp__pcre_compile __imp__pcre_free Errors

    写写英文吧,好长时间不写都有点不熟练了when I compile the following codes which test the pcre , I got the unreferenced error __imp__pcre_exec __imp__pcre_compile __imp__pcre_free Errors,my Codes are follows:
    //packing pcre usual functions.
    
    #ifndef _PCRE_H_
    #define _PCRE_H_
    #include <pcre.h>
    #include <string>
    #include <vector>
    #include <string.h>
    using namespace std;
    
    const int VECSIZE = 30;
    
    struct MatchResult
    {
    	string name;
    	vector<string> value;
    };
    
    class Pcre
    {
    public:
    	Pcre();
    	~Pcre();
    
    	//Add a regrex, pass in name and regrex
    	int AddRule(const string &name, const string &patten);
    
    	//clear all the regrex
    	void ClearRules();
    
    	//match all the regrex, also return all the string match to every regrex
    	vector<MatchResult> MatchAllRule(const char content[]);
    
    private:
    	const char *error;
    	int erroffset;
    	int ovector[VECSIZE];
    	vector<pcre*> re_arr;
    	vector<string> patten_name;
    };
    #endif

    Pcre.cpp

    #include "Pcre.h"
    #include <stdio.h>
    
    Pcre::Pcre()
    {
    	re_arr.clear();
    	patten_name.clear();
    }
    
    Pcre::~Pcre()
    {
    	for(int i=0; i<re_arr.size(); i++)
            {
                    pcre_free(re_arr[i]);
            }
    }
    
    //Add a regrex patten and compile it.
    int Pcre::AddRule(const string &name, const string &patten)
    {
    	pcre *re = pcre_compile(patten.c_str(), PCRE_MULTILINE|PCRE_UTF8|PCRE_NO_AUTO_CAPTURE, &error, &erroffset, NULL);
            if(re == NULL)
            {
                    printf("pcre compile failed, offset %d: %s\n", erroffset, error);
    		return -1;
            }
    	else
    	{
    		re_arr.push_back(re);
    		patten_name.push_back(name);
    	}
    }
    
    //clear all the rule
    void Pcre::ClearRules()
    {
    	for(int i=0; i<re_arr.size(); i++)
    	{
    		pcre_free(re_arr[i]); 
    	}
    	re_arr.clear();
    	patten_name.clear();
    }
    
    //match all regrex, if any match, return the matched patten name and it's values
    vector<MatchResult> Pcre::MatchAllRule(const char content[])
    {
    	vector<MatchResult> result_arr;
    	int length = strlen(content);
    	char buf[512];
    	for(int i=0; i<re_arr.size(); i++)
    	{
    		MatchResult result;
    		result.name = patten_name[i];
    		int cur = 0;
    		int rc;
            	while(cur<length && (rc = pcre_exec(re_arr[i], NULL, content, length, cur, PCRE_NOTEMPTY, ovector, VECSIZE)) >= 0)
            	{
                    	for(int j=0; j<rc; j++)
                    	{
    				memset(buf, 0, sizeof(buf));
    				strncpy(buf, content+ovector[2*j], ovector[2*j+1]-ovector[2*j]);
                            	result.value.push_back(buf);
                    	}
                    	cur = ovector[1];
    		}
    		if(result.value.size() > 0)
    			result_arr.push_back(result);
    	}
    	return result_arr;
    }
    
    

     Main.cpp

    1>正在生成代码...
    1>正在链接...
    1>Pcre.obj : error LNK2001: 无法解析的外部符号 __imp__pcre_free
    1>Pcre.obj : error LNK2001: 无法解析的外部符号 __imp__pcre_compile
    1>Pcre.obj : error LNK2001: 无法解析的外部符号 __imp__pcre_exec
    1>.\Debug/main.exe : fatal error LNK1120: 3 个无法解析的外部命令
    1>生成日志保存在“file://E:\Test\Pcre-Test\Debug\BuildLog.htm”
    1>main - 4 个错误,7 个警告
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

     Google it , I found the thread about the error, a comment gives the solutions:

    Building under Windows:

    If you want to statically link this program against a non-dll .a file, you must
    define PCRE_STATIC before including pcre.h, otherwise the pcre_malloc() and
    pcre_free() exported functions will be declared __declspec(dllimport), with
    unwanted results. So in this environment, uncomment the following line. */

    //#define PCRE_STATIC

    try it ... successful !!!!


  • 相关阅读:
    论文笔记:目标检测算法(R-CNN,Fast R-CNN,Faster R-CNN,FPN,YOLOv1-v3)
    论文笔记:IRGAN——A Minimax Game for Unifying Generative and Discriminative Information
    springer论文模板参考文献的顺序问题
    CIFAR和SVHN在各CNN论文中的结果
    论文笔记:CNN经典结构2(WideResNet,FractalNet,DenseNet,ResNeXt,DPN,SENet)
    latex常用符号
    python中的引用传递,可变对象,不可变对象,list注意点
    ImageNet历年冠军和相关CNN模型
    matplotlib 的颜色
    调整matplotlib的图例legend的位置
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9410111.html
Copyright © 2011-2022 走看看