小编jay*_*ant的帖子

构建和链接共享库

我试图使用g ++在windows cygwin平台上构建一个共享库,然后将其与另一个cpp文件链接:我使用以下命令:

// generate object file

g++ -g -c -Wall -fPIC beat11.cpp -o beat11.o

// to generate library from the object file

g++ -shared -Wl,-soname,libbeat.so.1 -o libbeat.so.1.0.1 beat11.o -lc

// to link it with another cpp file; -I option to refer to the library header file

g++ -L. -lbeat -I . -o checkbeat checkbeat.cpp
Run Code Online (Sandbox Code Playgroud)

链接时,会出现以下错误:

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: 
     cannot find -llibbeat.so.1.0.1

collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

库创建得很好,但我只能找到libbeat.so.1.0.1,而不是libbeat.so或libbeat.so.1(或者他们不应该在那里?)

其中一个问题建议为libbeat.so.1.0.1创建一个符号链接,但这也没有用

cygwin g++ shared-libraries

15
推荐指数
1
解决办法
5万
查看次数

android ndk jni没有找到实现错误

我正在使用android并试图在我的应用程序中使用一些本机代码.

这是应用程序代码的框架:

package A.B;
/*
import statements
*/

public class C extends Activity{

public void onCreate(...){
    ....
    foo();
    ....
}

public int foo(){
    .....
    data(a, b);
    .....
}

public int data(a, b){
    GetValues(a, b);
}

static{
    System.loadLibrary("baz");
}

public native int GetValues(int[] a, int b);
}
Run Code Online (Sandbox Code Playgroud)

本机方法签名如下:

JNIEXPORT jint JNICALL

Java_A_B_C_GetValues(JNIEnv *env, jobject obj, jintArray arr, jint b){

....

....

} 
Run Code Online (Sandbox Code Playgroud)

运行logcat时显示:W/dalvikvm(799):找不到本机LA/B/C的实现; .GetValues([IJ] I

ndk文档并没有严格提到创建一个头文件,所以我没有

android.mk文件的内容:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := baz
LOCAL_SRC_FILES := baz.cpp

include $(BUILD_SHARED_LIBRARY) …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android android-ndk

4
推荐指数
1
解决办法
8391
查看次数