当前位置: 首页 > 知识库问答 >
问题:

线程“main”java.lang.UnsatisfiedLinkError:无法加载库“TableauExtract”:找不到指定的模块

方河
2023-03-14
import com.tableausoftware.TableauException;
import com.tableausoftware.common.Type;
import com.tableausoftware.extract.Extract;
import com.tableausoftware.extract.Row;
import com.tableausoftware.extract.Table;
import com.tableausoftware.extract.TableDefinition;    
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class TestTableau {

    public static void main(String[] args) throws IOException {
        //delete existing extract file
        String extractFile = "extract.tde";
        deleteFile(extractFile);

        try (Extract extract = new Extract(extractFile)) {
            //create table definition
            TableDefinition tableDef = new TableDefinition();
            int columnCount = 100;
            for (int i = 0; i < columnCount; i++) {
                tableDef.addColumn(Integer.toString(i), Type.UNICODE_STRING);
            }

            //create a table
            Table table = extract.addTable("Extract", tableDef);

            //create a sample document
            //reuse the document for each row to minimize the non-tableau CPU and memory consumption
            Random random = new Random();
            List<String> rowData = new ArrayList<>();
            for (int i = 0; i < columnCount; i++) {
                rowData.add(Integer.toString(random.nextInt()));
            }

            long startTime = System.nanoTime();
            System.out.println("Populating table...");

            //populate the table
            int tableRows = 4000000;
            for (int i = 0; i < tableRows; i++) {
                //convert input document to tableau row
                Row row = new Row(tableDef);
                for (int j = 0; j < rowData.size(); j++) {
                    row.setString(j, rowData.get(j));
                }

                //add the row to the table
                table.insert(row);
            }

            long endTime = System.nanoTime();
            System.out.println(String.format("Total time (ms): %s", (endTime - startTime) /
                    1000000));

        } catch (TableauException e) {
            e.printStackTrace();
        }
    }

    private static void deleteFile(String file) {
        File extractFile = new File(file);
        if (extractFile.exists()) {
            extractFile.delete();
        }
    }
}

当我运行代码时,我收到异常:

线程“main”java.lang.UnsatisfiedLinkError中的异常:无法加载库“TableauExtract”:找不到指定的模块。

at com . sun . jna . native library . loadlibrary(native library . Java:194)at com . sun . jna . native library . getinstance(native library . Java:283)at com . sun . jna . native library . getinstance(native library . Java:244)at com . sun . jna . native . register(native . Java:1065)at com . tableausoftware . extract . extract .(来源不明)at TestTableau.main(来源

我已经将以下jar文件添加到构建路径:

tableauextract.jarjna.jartableaucommon.jar

这个问题怎么解决

共有2个答案

尚鸿才
2023-03-14

不满意的链接错误意味着您正在使用一个 jar 文件,该文件依赖于系统上存在的本机库,位于 Java 知道的位置。从您的堆栈跟踪中,我猜您需要 TableauExtract.dll(可能还有其他)。您需要的库可从 Tableau 站点获得,网址为:

Tableau SDK

一旦安装了它们,您需要告诉Java如何找到库文件所在的目录。这种方法取决于您的操作系统,但是在Unix上,您可以通过将该目录包含在LD_LIBRARY_PATH环境变量中来实现,或者使用-Djava.library.path=标志来实现

施海
2023-03-14

如果您将库放入了构建路径中,您是否尝试清理并再次构建项目?

 类似资料:
  • 我试图打印TSC-244 Pro条形码标签打印机从GWT网络应用程序。他们给出tsclib.dll。因此,我使用jna.jar并将tsclib.dll文件复制到C:\windows和[my_project_dir]\war\WEB-INF\lib。它的工作,但当我部署到apache Tomcat。它不工作,我有以下错误。请给我解决办法。谢谢。 严重:分派传入的RPC调用com.google.gwt

  • 问题内容: 我使用Maven 将其包含在我的项目中,并将Ghostscript安装到。 但是我仍然会出错 。 我添加到位于“ gsdll64.dll”(即)所在的env变量目录中。还尝试使用启动应用程序。 但是我总是得到(但是当我使用JVM参数启动时,我得到了异常(Eclipse找不到Main类,但是当我启动我的应用程序时,我手动将Eclipse指向Main类))/ 问题答案: 如果复制到工作目录

  • 问题内容: 当我运行程序进行智能卡读取时,会出现此异常。我的设备未连接。请帮我。 问题答案: 这意味着它无法加载您需要的共享库。这可能是因为。 该库不在您的库路径中。 该库名称不正确,例如,Unix上LIBRARY必须为libLIBRARY.so。 您无法执行该库。 该库不适用于操作系统或JVM的位大小。例如64位JVM将不会加载32位库。 您的JRE未正确安装,并且无法加载其自己的库之一。 您正

  • 谷歌搜索了几个小时,似乎没有任何解决方案暗示问题可能是什么,我尝试了所有这些,但它们都不起作用。问题是,我在github上有一个项目(Eclipse项目),我现在正在另一台计算机上尝试处理我的项目。我导入了它,获得了分支,但当我运行项目时,我得到一个 我总是将和连接到git,除了今天,它以前一直都能工作。 我认为问题是JVM试图从包含JRE7的文件夹内部运行文件,但我的项目不在那里。我刚刚注意到控

  • 我正在我的VB中添加VC库。Net程序,例如: 我在运行时遇到了错误: 无法加载DLL“KMpeg4”。dll':找不到指定的模块。(来自HRESULT的异常:0x8007007E) 我把这个库放在了所有地方,包括,但仍然没有运气,这意味着它缺少。 所以我运行了依赖步行者,它给了我丢失的lib: 以及糟糕的lnking功能: dependency walker出现以下错误: 警告:未找到至少一个延