精华内容
下载资源
问答
  • 要具有lib文件和.h文件 1.加入语句 #pragma comment(lib, "C:\\test\\Debug\\test.lib" 2.项目右键-〉属性-〉c++ -〉常规-〉附加包含目录-〉填入test.h文件的文件夹 http://www.cnblogs.com/include 方法2: ...

    方法1:

    要具有lib文件和.h文件

    1.加入语句 #pragma comment(lib, "C:\\test\\Debug\\test.lib"

    2.项目右键-〉属性-〉c++ -〉常规-〉附加包含目录-〉填入test.h文件的文件夹 http://www.cnblogs.com/include

    方法2:

    这种方法可能移植的时候更方便一些

    1.项目右键-〉属性-〉链接器 ->常规 ->附加库目录填入lib所在的文件夹./lib/debug

    项目右键-〉属性-〉链接器 ->输入 ->附加依赖项填入lib文件的名称.

    2.项目右键-〉属性-〉c++ -〉常规-〉附加包含目录-〉填入test.h文件的文件夹 http://www.cnblogs.com/include

    NOTE:

    注意如果.h文件在include的某个文件夹下,使用时一定要在#include 的时候引入路径,如#include "Utility\Process.h"

    如果引入后出现LNK 2005错误,需要在连接器命令行加入/force

    转载于:https://www.cnblogs.com/EverShine/archive/2011/03/04/1970620.html

    展开全文
  • Qt 中怎样添加文件

    2013-11-26 12:08:34
    在Qt中工程通过.pro文件管理,所以库文件要在.pro文件添加。 1.添加文件 静态库 linux:LIBS += your_lib_path/your_lib 动态库 linux:LIBS += -L your_lib_path -lyour_lib//经过测试了 win32:LIBS...




    qmake -project
    qmake name.pro
    在Qt中工程通过.pro文件管理,所以库文件要在.pro文件中添加。
    1.添加库文件
    静态库
    linux:LIBS += your_lib_path/your_lib
    动态库
    linux:LIBS += -L your_lib_path -lyour_lib//经过测试了


    win32:LIBS += your_lib_path/your_lib
    例如:
    LIBS += -L lib/pcsc/ -lpcsclite
    LIBS += lib/pcsc/libpcsclite.a

     

    2.添加头文件
    INCLUDEPATH += your_include_path
    例如:
    INCLUDEPATH += . /usr/local/include(点号后面有空格)

     

    3.添加要编译的源文件和头文件
    SOURCES:所有源文件列表
    HEADERS:所有头文件列表
    FORMS:所有.ui文件列表


    前期工作:
    1.检查gcc,g++,qmake是否用错。
    2.在Makefile中检查是否少了头文件
    3.检查是否“”与<>错用了
    4.需要另外加库的程序最好单独建一个文件

    展开全文
  • qt中怎样添加文件

    千次阅读 2013-04-03 10:31:15
    在Qt中工程通过.pro文件管理,所以库文件要在.pro文件添加。 1.添加文件 静态库 linux:LIBS += your_lib_path/your_lib//动态库这样也可以,你们可以考虑。 动态库 linux:LIBS += -L your_lib_path -...
    qmake -project
    qmake name.pro
    在Qt中工程通过.pro文件管理,所以库文件要在.pro文件中添加。
    1.添加库文件
    静态库
    linux:LIBS += your_lib_path/your_lib//动态库这样也可以,你们可以考虑。
    动态库
    linux:LIBS += -L your_lib_path -lyour_lib//经过测试了
    例如:
    LIBS += -L lib/pcsc/ -lpcsclite
    LIBS += lib/pcsc/libpcsclite.a

    win32:LIBS += your_lib_path/your_lib

    2.添加头文件
    INCLUDEPATH += your_include_path
    例如:
    INCLUDEPATH += . /usr/local/include(点号后面有空格)

    3.添加要编译的源文件和头文件
    SOURCES:所有源文件列表
    HEADERS:所有头文件列表
    FORMS:所有.ui文件列表

    前期工作:
    1.检查gcc,g++,qmake是否用错。
    2.在Makefile中检查是否少了头文件
    3.检查是否“”与<>错用了
    4.需要另外加库的程序最好单独建一个文件


    展开全文
  • 前言Android studio工程中经常会用到native 方法,方法之一是在libs文件夹中引入so文件,这样需要用到native方法的类直接调用如下方法加载库即可:System.loadLibrary("test-lib");如果不想引用so文件,想要直接在AS...

    前言

    Android studio工程中经常会用到native 方法,方法之一是在libs文件夹中引入so文件,这样需要用到native方法的类直接调用如下方法加载库即可:

    System.loadLibrary("test-lib");

    如果不想引用so文件,想要直接在AS中实现native方法也是可以的。此时需要在项目中添加cpp文件,且需要做相关的配置,下面详细说明。

    概述

    环境准备

    要想在AS中编译cpp文件,则需要下载NDK和安装cmake工具,否则无法使用。

    NDK和cmake的安装很简单,AS中直接就可以处理,操作如下:

    Tools->SDK Manager->Android SDK->SDK Tools

    按如上点击,找到SDK Tools,就可以看到一系列的工具供安装,如下图是已经安装了NDK和Cmake的。

    07b9d4c18815b4a3bdd87fc59bd86443.png

    创建cpp目录以及cpp文件

    在如下目录创建cpp文件夹:

    mkdir app/src/main/cpp/

    接着在该目录下创建cpp文件:

    406789421e58557c2f5e7bc4b38cb5ef.png

    在此命名cpp文件名为test.cpp,并添加如下内容:

    #include <jni.h>
    #include <string.h>
    
    JNIEXPORT jstring JNICALL Java_com_xxx_yyy_MainActivity_startTestJni(
            JNIEnv *env,
            jobject thiz) {
                char *hello = "hello test...";
                return env->NewStringUTF(hello);
            }

    如上com_xxx_yyy为包名,而MainActivity则是表示在MainActivity类中使用native方法。

    每个类对应一个native文件,有一一对应的关系,这里需要注意。否则运行的时候会报找不到对应的class。

    创建CMakeLists.txt 文件

    CMakeLists.txt是编译cpp文件的规则,在该文件中会指定cpp文件编译出来的so库名称。创建方法如下:

    520f1a1fe34a0ec3010dc8972d7f8624.png

    在此命名为CMakeLists.txt。在该文件中添加如下内容:

    cmake_minimum_required(VERSION 3.4.1)
    
    add_library( # Sets the name of the library.
             test-lib
    
             # Sets the library as a shared library.
             SHARED
    
             # Provides a relative path to your source file(s).
             src/main/cpp/test.cpp )
    
    find_library( # Sets the name of the path variable.
              log-lib
    
              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )
    
    target_link_libraries( # Specifies the target library.
                       test-lib
    
                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

    在add_library中指定so库名称,属性(是否设置为共享库)以及源文件。

    build.gradle中配置

    打开build.gradle向android/defaultConfig节区追加以下内容:

    externalNativeBuild {
        cmake {
            cppFlags ""
        }
    }

    向android节区追加以下内容:

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }

    最终配置如下图:

    127f34cad546a074d59e8b92f75e3306.png

    MainActivity中使用该native方法

    先声明对应的native方法,如这里的test.cpp中添加的native方法如下:

    Java_com_xxx_yyy_MainActivity_startTestJni

    那么我们在MainActivity中声明如下:

    public native String startTestJni();

    当然,在调用该方法前,还需要加载对应的so库,名称为test-lib,如下:

    static {
        System.loadLibrary("test-lib");
    }

    这样就可以使用该native方法了。

    如何简化 native方法名

    在上面的例子中,native方法名长得可怕,且方法名受包名限制,如下:

    JNIEXPORT jstring JNICALL Java_com_xxx_yyy_MainActivity_startTestJni

    这样一坨方法名,简直无法接受。

    方法名如此受限是因为JNI方法采用了静态注册的方法。聪明如你,这时肯定想到,要想使用简洁不受限的方法名,则需要使用动态注册的方法了。

    使用动态注册的方法时,需要在cpp文件中实现JNI_OnLoad方法:

    JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
        JNIEnv* env = NULL;
        jint result = -1;
    
        if (vm->GetEnv((void**) &env, JNI_VERSION_1_6) != JNI_OK) {
            return -1;
        }
        assert(env != NULL);
    
        if (!registerNatives(env)) {
            return -1;
        }
    
        result = JNI_VERSION_1_6;
        return result;
    }

    当我们调用System.loadLibrary方法加载so库时,系统就会去查找对应的JNI_OnLoad方法,如果没找到,则默认为静态注册方法,此时直接返回so加载成功的标志。

    如果系统找到了JNI_OnLoad方法,但没做相应的方法注册,则此时系统会抛出异常。

    动态注册实现

    动态注册方法实现源码如下:

    //方法名
    static JNINativeMethod gMethods[] = {
        { "startTestJni", "()Ljava/lang/String;",(void*) native_startTestJni },
    };
    
    
    static int registerNativeMethods(JNIEnv* env, const char* className,
                                     JNINativeMethod* gMethods, int numMethods) {
        jclass clazz;
    
        clazz = env->FindClass(className);
        if (clazz == NULL) {
            return JNI_FALSE;
        }
        if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
            return JNI_FALSE;
        }
    
        return JNI_TRUE;
    }
    
    
    static int registerNatives(JNIEnv* env) {
        //这里需要指定使用该native方法的类名,由包名和类名组成
        const char* kClassName = "com/xxx/yyy/MainActivity";
        return registerNativeMethods(env, kClassName, gMethods,
                                     sizeof(gMethods) / sizeof(gMethods[0]));
    }

    registerNatives方法最终是在JNI_OnLoad方法中调用。

    这里重点说下gMethods的规则:

    static JNINativeMethod gMethods[] = {
        { "startTestJni", "()Ljava/lang/String;",(void*) native_startTestJni },
    };

    其中startTestJni为Java类中定义的Native方法名。

    ()Ljava/lang/String; 为方法的签名, ()表示该方法无参数, Ljava/lang/String;表示返回值为Java中的String类型。其他类型的使用以及带参如何写,可以网上查找相关知识,有很多。

    而(void*) native_startTestJni为Native实现的方法名。这里强制转换成了函数指针。

    所以如果采用动态注册的方法,最终的test.cpp文件如下:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <jni.h>
    
    #include <android/log.h>
    static const char *TAG = "test";
    #define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO,  TAG, fmt, ##args)
    #define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt, ##args)
    #define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args)
    
    
    jstring  native_startTestJni(JNIEnv * env, jobject thiz)
    {
        char *hello = "hello test ...";
        return env->NewStringUTF(hello);
    }
    
    static JNINativeMethod gMethods[] = {
            { "startTestJni", "()Ljava/lang/String;",(void*) native_startTestJni },
    };
    
    
    static int registerNativeMethods(JNIEnv* env, const char* className,
                                     JNINativeMethod* gMethods, int numMethods) {
        jclass clazz;
    
        clazz = env->FindClass(className);
        if (clazz == NULL) {
            return JNI_FALSE;
        }
        if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
            return JNI_FALSE;
        }
    
        return JNI_TRUE;
    }
    
    static int registerNatives(JNIEnv* env) {
        const char* kClassName = "com/cvte/irsensor/MainActivity";
        return registerNativeMethods(env, kClassName, gMethods,
                                     sizeof(gMethods) / sizeof(gMethods[0]));
    }
    
    JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
        JNIEnv* env = NULL;
        jint result = -1;
    
        if (vm->GetEnv((void**) &env, JNI_VERSION_1_6) != JNI_OK) {
            return -1;
        }
        assert(env != NULL);
    
        if (!registerNatives(env)) {
            return -1;
        }
    
        result = JNI_VERSION_1_6;
        LOGD("this is JNI_OnLoad for test-lib..");
        return result;
    }

    结语

    此次是要做一个串口服务,引用了一个之前同事开发好的so库,但该库有问题,导致串口通讯一直失败。于是就决定自己写一个。网上资料很多,也踩坑了不少,在此记录,免得下次再次踩坑。

    微信公众号

    我在微信公众号也有写文章,更新比较及时,有兴趣者可以微信搜索【Android系统实战开发】,关注有惊喜哦!

    展开全文
  • 创建:新建项目->静态库添加MyLib.h头文件#pragma oncevoid printfHello();添加MyLib.cpp源文件#include "stdafx....}点击生成解决方案,成功表示静态库文件.lib已生成。使用:新建项目->控制台应用程序第一种...
  • 如果你常使用它们,扔进你的VC库Microsoft Visual Studio 10.0\VC\...放在其他位置,用双引号包含头文件,双引号内写全路径或对当前文件的相对路径(支持两个点表示父目录),在项目属性include中添加包含路径后可
  • 怎样生成lib文件chatting.lib,并实现其中的函数:int print(int i);现用vs2008,过程如下: 1. 创建 chatting 工程 1)选择“ Win32 控制台应用程序 ” 2)在“应用程序类型”中选择“静态库” 2.在工程"chatting"中...
  • QT 怎样添加编译选项

    千次阅读 2017-09-05 15:34:47
    在.pro文件添加: QMAKE_CXXFLAGS += -std=c++11 QMAKE_CFLAGS += -fPIC ...1.添加文件静态库linux:LIBS += your_lib_path/your_lib动态库linux:LIBS += -L your_lib_path -lyour_lib //经过测试了 Li...
  • 针对单个项目的方法添加编译所需要依赖文件(lib) [解决方案资源管理器]项目->属性->配置属性->连接器->输入->附加依赖项里填写***.lib,多个 lib 以空格隔开。等同于代码: #pragma comment(lib, &...
  • 我把sklearn文件放入jython路径,如:F:\tool\java\jython\Lib\site-packages\sklearn 但在jython中执行from sklearn import feature_extraction,仍然报错。错误为![图片说明]...
  • 1. 添加编译所需要(依赖)的 lib 文件 [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 (等同于“#pragma comment(lib, "winsock.lib") ”...
  • VC++ 项目怎样添加“依赖”、“库目录”和“包含目录”  1. 添加编译所需要(依赖)的 lib 文件 [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个...
  • 1. 添加编译所需要(依赖)的 lib 文件 [解 决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多 个 lib 以空格隔开。(等同于“#pragma comment(lib, ...
  • VS2008 C++ 项目怎样添加“依赖”、“库目录”和“包含目录”  1. 添加编译所需要(依赖)的 lib 文件 [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,...
  • 1. 添加编译所需要(依赖)的 lib 文件 [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 (等同于“#pragma comment(lib, "winsock.lib") ...
  • 1. 添加编译所需要(依赖)的 lib 文件[解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。(等同于“#pragma comment(lib, ...
  • [Setting]VS2008项目怎样添加“依赖(lib)”、“库目录(Libs)”、“包含目录(include)”和“引用动态链接库(dll)”简介: VS2008 C++ 项目怎样添加“依赖(lib)”、“库目录(Libs)”、“包含目录(include)”和“引用...
  • 怎样添加模块到已建工程中现在想把QTnetwork.lib要加入到已有的项目中,如果直接修改*.mmp文件,当重新编译后,该文件又被还原了. 也就是说在Carbide中无论使用什么方法来修改*.mmp文件,都会无效, 并且在编译后被...
  • 1. 添加编译所需要(依赖)的 lib 文件(属于动态加载)  [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。  (等同于“#pragma ...

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

怎样添加lib文件