在Linux(CentOS)上,我偶尔会在构建一个仅依赖于某些目标文件部分的测试应用程序时使用import java.util.stream.Stream;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String input = "C://data.txt";
String output = "C://data1.txt";
String date = getDate();
addDate(input,output,date);
}
public static void addDate(String in, String out,String date)
{
try (Stream<String> stream = Files.lines(Paths.get(in));
PrintWriter output = new PrintWriter(out, "UTF-8"))
{
stream.map(x -> {
if(x.startsWith("H")) return (x +" "+date);
else return x;
}
).forEach(output::println);
}
catch(IOException e){e.printStackTrace();}
}
public static String getDate(){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate localDate = LocalDate.now();
return dtf.format(localDate);
}
}
,即使完全依赖还需要包含更多目标文件。关键是我通过设计知道运行测试应用程序时从未遇到任何未解决的符号(否则它应该崩溃)。
在OS X上,我发现类似的选项-Wl,--unresolved-symbols=ignore-in-object-files
允许我构建二进制文件,但它在运行时失败抱怨-Wl,-undefined,suppress (or warning, dynamic_lookup),-flat_namespace
,即使在运行期间从未使用过丢失的符号(相同的应用程序在CentOS上运行得非常好。
是否有其他东西迫使应用程序运行(如果遇到未解决的符号,它会崩溃),就像在Linux上一样?