Android JNI pthread_create"论证太多,预计1"

时间:2017-06-09 17:40:26

标签: android c java-native-interface

每次我在生命中使用pthread_create时,都需要四个参数。出于某种原因,当我在使用android和JNI时尝试在C中创建一个线程时,我看到了这个:

enter image description here

发生了什么事
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                      void *(*start_routine) (void *), void *arg);

为什么我没有看到它?

修改

甚至更奇怪的是,我在#include <pthread.h>上点击了Go to->Declaration并点击了pthread_create,向下滚动直到我看到<?php if($_SERVER['REQUEST_METHOD'] =="POST"){ $email = $_POST['email']; $username = $_POST['username']; //if email and username is empty then do this if(empty($email) && empty($username)){ $nullResult = array(); $nullResult['Email'] = (empty($email))? "empty" : ""; $nullResult['Username'] = (empty($username))? "empty" : ""; echo json_encode($nullResult); exit(); } //Connect to database try{ // new php data object $handler = new PDO('mysql:host=127.0.0.1;dbname=magicsever', 'root', ''); //ATTR_ERRMODE set to exception $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ die("There was an error connecting to the database"); } //find email and username and Prepare $emailQuery = $handler->prepare( "SELECT * FROM app_signup WHERE email = ?"); $usernameQuery = $handler->prepare("SELECT * FROM app_signup WHERE username = ?"); //Execute; $emailQuery->execute(array($email)); $usernameQuery->execute(array($username)); //Check if the email is empty if(empty($email)){ $nullResult = array(); $nullResult['Email'] = (!empty($email))? "empty" : ""; $nullResult['Username'] = ($usernameQuery->rowCount())? false: true; echo json_encode($nullResult); die(""); }else{ echo "Test"; } } ?> 并显示正确的version: '3' volumes: node_deps: services: nginx: build: ./nginx image: nginx_i container_name: nginx_c ports: - '80:80' - '443:443' links: - node restart: always node: build: ./node image: node_i container_name: node_c command: "npm start" ports: - '5000:5000' - '5001:5001' - '5500:5000' - '5501:5001' volumes: - ./node:/src - node_deps:/src/node_modules 功能定义。

编辑2:

更奇怪的是,我现在意识到它编译得很好。它与编辑器有关。如果我输入四个参数,它在编辑器&#34;期望的1个参数&#34;中说,但它编译没有任何问题。但是,如果我只提供编辑想要的1个参数,则无法编译说&#34;预期的4个参数&#34;在错误日志中。

我不知道它是怎么回事。

2 个答案:

答案 0 :(得分:1)

看起来Android Studio对NDK r15中现在使用的 _Nonnull 非常不满意。您可以选择GCC编译器

android { defaultConfig { externalNativeBuild { ndkBuild { 
   arguments "NDK_TOOLCHAIN_VERSION=4.9" 
}}}}

或者您可以停用新的Unified Headers

android { defaultConfig { externalNativeBuild { ndkBuild { 
   arguments "APP_DEPRECATED_HEADERS=true" 
}}}}

或者您可以切换到NDK r14或更早。

我为Android Studio / C ++开发了一个issue

答案 1 :(得分:0)

需要插入临时定义

onResume

到pthread.h以防止Android Studio显示错误。